2 votes

bash script/pgrep ne fonctionne pas comme prévu

J'ai un script bash script qui essaie d'appeler pgrep avec des arguments (simplifiés à l'extrême) :

PATTERN="'/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'"
pgrep -f $PATTERN
echo pgrep -f $PATTERN

Le résultat est le suivant :

Usage: pgrep [-cflvx] [-d DELIM] [-n|-o] [-P PPIDLIST] [-g PGRPLIST] [-s SIDLIST]
        [-u EUIDLIST] [-U UIDLIST] [-G GIDLIST] [-t TERMLIST] [PATTERN]
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$'

Je suppose que cela signifie que l'argument n'est pas transmis à pgrep mais qu'il est transmis à echo pour une raison quelconque.

Ce que j'attends :

7632
pgrep -f '/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf$'

Lorsque j'exécute la ligne preg seule, elle produit 7632 comme prévu.

Est-ce que je fais quelque chose de mal ? J'ai essayé avec sh, dash et bash. Même résultat, je ne vois vraiment pas le problème.

3voto

barti_ddu Points 5423

Vous devez entourer MODÈLE entre guillemets :

PATTERN="/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$"
pgrep -f "$PATTERN"

Voir : citant des variables

Editer : Et pour l'écho, je me contenterais de faire :

echo pgrep -f \'$PATTERN\'

2voto

shellter Points 15304

Comme je n'ai pas lighttpd.bin disponible pour tester, je soumets une option non testée, principalement en accord avec @barti_ddu, mais avec une tournure légèrement différente

PATTERN='/opt/apps/bin/lighttpd.bin -f /opt/apps/etc/lighttpd/lighttpd.conf\$'
pgrep  -f "$PATTERN"
echo pgrep  -f "$PATTERN"

Je garderais les guillemets simples sur l'assignement à PATTERN, mais je suis tout à fait d'accord que vous avez besoin des guillemets doubles lorsque vous l'utilisez avec pgrep ou echo.

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X