Bonjour,
si je fait un
ps -edf | grep toto | grep -v tata && echo $?
je n'ai pas de code retour...La commande ne renvoi rien...
Comment récupérer le code retour de cette enchainement de pipe?
Merci.
C'est bel et bien un point-virgule qui résout son problème. Je ne vois pas pourquoi tu as été moinssé :-)
la partie "&& echo $?" ne fait rien pour la simple raison que le second grep indique qu'il n'a rien trouvé, donc ce qui suit le && n'est pas appelé (c'est fait pour).
Dans a && b, b est exécuté si et seulement si a a renvoyé 0. Donc dans ton cas, la seule chose qui peut être affichée par ton echo est 0. En remplaçant && (qu'il faut voir comme un opérateur logique) par ; (opérateur de séquencement, on va dire), tu verras le code de retour du dernier élément du pipe.
Autre chose : si tu veux faire des recherches sur les processus en cours d'exécution, utilise plutôt pgrep, disponible sous tous les Unix modernes, et qui sera bien moins sensible aux variations dans les formats de ps.
Autre chose : si tu veux faire des recherches sur les processus en cours d'exécution, utilise plutôt pgrep, disponible sous tous les Unix modernes, et qui sera bien moins sensible aux variations dans les formats de ps.
Non, il n'est pas disponible sur tous les unix modernes comme tu le prétends. D'autre part il y a encore beaucoup de boites qui bossent avec de vieilles versions Unix (Solaris 8, HP-UX 11.11 voire 11.0, ou AIX 4.3). Donc si on veut un script portable il faut se méfier.
# Point-virgule
Posté par Édouard Siha . Évalué à 8.
ps -edf | grep toto | grep -v tata ; echo $?
[^] # Re: Point-virgule
Posté par Kerro . Évalué à 4.
la partie "&& echo $?" ne fait rien pour la simple raison que le second grep indique qu'il n'a rien trouvé, donc ce qui suit le && n'est pas appelé (c'est fait pour).
[^] # Re: Point-virgule
Posté par tuXico . Évalué à 1.
a|b|c; echo $?
tu récupères le return code de c
$ps|sl; echo $?
bash: sl: command not found
127
$ ps|sl|ls; echo $?
bash: sl: command not found
Liste de fichiers que c'est chez moi
0
(on me souffle dans l'oreillette que ma réponse n'est pas complète : si la commande b casse le (sa) pipe, on devrait avoir son rc à elle -b, donc-)
note : Nommer son post "Enchainement de pipe", c'est très provocateur :p
# Re: Enchainement de pipe
Posté par Frédéric Perrin (site web personnel) . Évalué à 7.
Autre chose : si tu veux faire des recherches sur les processus en cours d'exécution, utilise plutôt pgrep, disponible sous tous les Unix modernes, et qui sera bien moins sensible aux variations dans les formats de ps.
[^] # Re: Enchainement de pipe
Posté par totof2000 . Évalué à 2.
Non, il n'est pas disponible sur tous les unix modernes comme tu le prétends. D'autre part il y a encore beaucoup de boites qui bossent avec de vieilles versions Unix (Solaris 8, HP-UX 11.11 voire 11.0, ou AIX 4.3). Donc si on veut un script portable il faut se méfier.
# Solution
Posté par benjamin henrion . Évalué à 1.
echo $? n'est pas traité car grep -v renvoie 1 en cas de réussite et non pas 0 comme d'habitude ! C'est l'exeption ...
Bonne journée.
[^] # Re: Solution
Posté par gaaaaaAab . Évalué à 4.
$ echo bla |grep -v 'i';
bla
$echo $?
0
$ echo bla |grep -v 'a';
$echo $?
1
avec -v, le filtre est inversé, mais pas le retour de grep.
[^] # Re: Solution
Posté par tuXico . Évalué à 3.
héhé, ton "!" est placé de manière déroutante :p
grep renvoie 0 (...)
et
! grep renvoie 1 (...)
[^] # Re: Solution
Posté par gaaaaaAab . Évalué à 2.
mais, bien vu !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.