Je suis confus quant à la signification du code de sortie à la fin d'un script bash: je sais que le code de sortie 0 signifie qu'il s'est terminé avec succès et qu'il y a beaucoup plus de numéros de codes de sortie (127 si je ne me trompe pas?)
Ma question concerne le fait de voir le code de sortie 0 à la fin d'un script, force-t-il le code de sortie à 0 même si le script a échoué ou a-t-il une autre signification?
bash
shell-script
exit
exit-status
Busted
la source
la source
exit 0
, il se terminera avec le code de sortie de 0 indépendamment de ce qui se passe dans le script.exit 0
, il ne sortira avec le code 0 que si cette dernière instruction a été exécutée. Le seul impact deexit 0
à la fin du script est de retourner 0 au lieu du statut de l'instruction précédente.Réponses:
La commande intégrée
exit
quitte le shell (à partir de la référence de Bash ):L'exécution à la fin du fichier se termine également, renvoyant le code retour de la dernière commande, donc oui, une finale
exit 0
fera que le script se terminera avec un état réussi, quel que soit l'état de sortie des commandes précédentes. (Autrement dit, en supposant que le script atteigne la finaleexit
.) À la fin d'un script, vous pouvez également utilisertrue
ou:
pour obtenir un code de sortie de zéro.Bien sûr, plus souvent, vous utiliseriez
exit
de l'intérieur d'unif
pour terminer le script au milieu.Ceux-ci doivent afficher un 1 (
$?
contient le code de sortie renvoyé par la commande précédente):Bien que cela devrait imprimer un 0:
Je ne sais pas si le concept du script "échouant" lors de l'exécution d'un
exit
est logique, car il est tout à fait possible que certaines commandes exécutées par le script échouent, mais que le script lui-même réussisse. C'est à l'auteur du script de décider ce qui est un succès et ce qui ne l'est pas.En outre, la plage standard pour les codes de sortie est 0..255. Les codes supérieurs à 127 sont utilisés par le shell pour indiquer un processus terminé par un signal, mais ils peuvent être retournés de la manière habituelle. L'
wait
appel système renvoie en fait une valeur plus large, le reste contenant des bits d'état définis par le système d'exploitation.la source
$?
sur 128 + signum dans ce cas. Voir Code de sortie par défaut à la fin du processus? pour plus de détails.exit 0
ne renverra que 0 si la sortie est exécutée. (il pourrait sortir par un itinéraire différent).0 signifie succès, des entiers positifs signifient échec. Il existe 255 codes d'erreur différents, mais les valeurs 126 et supérieures sont réservées pour indiquer qu'un programme n'a pas pu démarrer (126 ou 127) ou a été tué par un signal (129 et supérieur). Voir Code de sortie par défaut à la fin du processus? et Quelles valeurs de retour / sortie puis-je utiliser dans les fonctions / scripts bash? pour plus d'informations.
L'état de sortie d'un script shell est l'état de sortie de la dernière commande exécutée par le script. Donc par exemple
renvoie l'état de sortie de
somecommand
, tandis querenvoie 0 quel que soit le résultat
somecommand
. Ce deuxième script pourrait également être écritMettre
exit 0
à la fin d'un script ne le fait pas nécessairement renvoyer 0. Cela ne le fait retourner 0 que lorsque la fin du script est atteinte. Par exemple, le script suivant renvoie toujours 3:Le script suivant renvoie également toujours un code d'erreur, en plus d'afficher un message sur une erreur de syntaxe:
Le script suivant renvoie 1 ou 0 selon son premier argument:
Le script suivant renvoie le statut de
somecommand
, carset -e
provoque la fermeture du script en cas d'somecommand
échec:la source