C codes retour de programme et symbole && bash?

Dans bash, nous pouvons utiliser l’opérateur && pour exécuter deux commandes. Par exemple:

./foo && ./bar 

Va d’abord exécuter foo , et seulement si foo est “réussi”, il exécutera alors bar . Cependant, cela semble contre-intuitif lorsque vous considérez que les programmes C, par convention, renvoient 0 ou exit(0) en cas de réussite, ce qui est contre-intuitif pour le comportement de l’opérateur && . (Puisque dans la plupart des langues, 0 est considéré comme une “falsey”, et donc empêcherait l’exécution de la deuxième déclaration.) Qu’est-ce que je manque?

Vous ne manquez rien. Vous devez simplement garder à l’esprit que les true et les false ne sont pas des concepts fondamentaux dans le shell. success et l’ failure sont.

La convention de langage C selon laquelle 0 est faux et toute autre chose vraie est une convention . Bash (et les shell unix en général), utilisez la convention opposée: 0 est vrai, tout le rest est faux.

 $ if ( exit 0 ); then echo true; else echo false; fi true $ if ( exit 1 ); then echo true; else echo false; fi false $ if ( exit 2 ); then echo true; else echo false; fi false 

De ce fait, la true commande quitte toujours avec le statut 0, tandis que les false sorties avec le statut 1.

 $ true; echo $? 0 $ false; echo $? 1 

Cela peut être plutôt déconcertant pour quelqu’un qui est habitué à la convention C, mais cela a beaucoup plus de sens en termes de shell que vérité = succès = état de sortie nul, alors que faux = échec = statut de sortie non nul.

Vous && opérateur Bash ‘s && est défini ainsi:

command1 && command2
command2 est exécuté si et seulement si command1 renvoie un état de sortie égal à zéro.