110 votes

Empêcher grep de renvoyer une erreur lorsque l'entrée ne correspond pas

Je veux écrire dans un script bash un morceau de code qui vérifie si un programme est déjà en cours d'exécution. J'ai ce qui suit pour rechercher si bar est en cours d'exécution

 foo=`ps -ef | grep bar | grep -v grep`

Le

 grep -v grep

partie est pour s'assurer que le "grep bar" n'est pas pris en compte dans les résultats de ps

Lorsque bar n'est pas en cours d'exécution, foo est correctement vide. Mais mon problème réside dans le fait que le script a

 set -e

qui est un indicateur pour terminer le script si une commande renvoie une erreur. Il s'avère que lorsque bar n'est pas en cours d'exécution, "grep -v grep" ne correspond à rien et grep renvoie une erreur. J'ai essayé d'utiliser -q ou -s mais sans succès.

Existe-t-il une solution à cela? Merci

1voto

Essayez de faire comme cela :

ps auxw | grep -v grep | cat

cat renvoie toujours 0 et ignore le code de sortie de grep

-1voto

nroose Points 135

Tout est assez désordonné si vous utilisez grep et il arrive parfois qu'il ne trouve pas de correspondances et que vous souhaitiez simplement continuer. Si vous avez installé Ruby, vous pouvez faire ruby -ne 'print if /bar/', et il n'affichera rien s'il n'y a pas de correspondances.

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