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.