Code de sortie à la fin dun script bash

Je suis confus sur la signification du code de sortie à la fin dun script bash: je connais ce code de sortie 0 signifie quil sest terminé avec succès, et quil y a beaucoup plus de numéros de code de sortie (127 si je ne me trompe pas?)

Ma question concerne le moment où le code de sortie 0 à la fin dun script est cela force le code de sortie à 0 même si le script a échoué ou a-t-il une autre signification?

Commentaires

  • Si un script se termine par exit 0, il se terminera avec le code de sortie de 0 indépendamment de ce qui se passe dans le script.
  • @Hatclock why didn ' t vous postez votre réponse comme une promesse de réponse complète? comme commentaire je ne peux pas le marquer, et je ne pense ' que vous obtenez de faux points Internet pour répondre (nest-ce pas?) Juste une pensée. .. (bravo pour la réponse rapide)
  • Je ' m dans une gare sur mon téléphone, je ne Je naime pas trop taper sur mon téléphone. ilkkachu semble avoir une bonne réponse cependant!
  • @Hatclock Non, pas du tout. Si un script se termine par exit 0, il se terminera avec le code 0 uniquement si cette dernière instruction a été exécutée. Le seul impact de exit 0 à la fin du script est de renvoyer 0 au lieu du statut de linstruction précédente.
  • @Gilles Cétait plus ambigu réponse écrite de ma part. Si un script exécute exit 0 à tout moment, il renverra le code de sortie 0 indépendamment de ce qui sest passé avant cela.

Réponse

La commande intégrée exit quitte le shell (de Bash « s référence ):

exit [n]
Quitte le shell, retourne un état de n au parent du shell. Si n est omis, létat de sortie est celui de la dernière commande exécutée. Tout trap sur EXIT est exécuté avant la fin du shell.

Courir jusquà la fin du fichier se termine également, renvoyant le code de retour de la dernière commande, donc oui, un exit 0 final fera sortir le script avec un statut de réussite quel que soit le statut de sortie de les commandes précédentes. (Autrement dit, en supposant que le script atteigne le dernier exit.) À la fin dun script, vous pouvez également utiliser true ou pour obtenir un code de sortie de zéro.

Bien sûr, plus souvent, vous » utiliseriez exit depuis lintérieur dun if pour terminer le script au milieu.

Ceux-ci devraient afficher un 1 ($? contient le code de sortie renvoyé par la commande précédente) :

sh -c "false" ; echo $? sh -c "false; exit" ; echo $? 

Bien que cela devrait afficher un 0:

sh -c "false; exit 0" ; echo $? 

Je « ne suis pas sûr si le concept du script « échouant » lors de lexécution dun exit a du sens, car il est tout à fait possible que certaines commandes exécutées par le script échouent, mais le script lui-même réussit . Cest à lauteur du script de décider ce qui est un succès et ce qui ne lest pas.

De plus, 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 renvoyés de la manière habituelle. Lappel système wait renvoie en fait une valeur plus large, le reste contenant des bits détat définis par le système dexploitation.

Commentaires

  • Cool, je ne savais pas ' sur la numérotation des codes de sortie 8 bits. Merci!
  • Notez que lorsquun processus est tué, il ne se termine pas avec un code de sortie > 127. Il ' s juste que certains shells fixent $? à 128 + signum dans ce cas. Voir Code de sortie par défaut lorsque le processus est terminé? pour plus de détails.
  • exit 0 ne retournera que 0, si la sortie est exécutée. (il pourrait sortir par une autre route).

Réponse

0 signifie succès, les entiers positifs signifient échec. Il existe 255 codes derreur différents, mais les valeurs 126 et supérieures sont réservées pour indiquer quun programme na pas pu démarrer (126 ou 127) ou a été tué par un signal (129 et plus). 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 dinformations.

Le statut de sortie dun script shell est le statut de sortie de la dernière commande exécutée par le script. Par exemple,

#!/bin/sh somecommand 

renvoie létat de sortie de somecommand, alors que

#!/bin/sh somecommand exit 0 

renvoie 0 indépendamment de ce que somecommand est retourné.Ce second script pourrait aussi être écrit

#!/bin/sh somecommand true 

Mettre exit 0 à la fin dun script ne cause pas forcément il renvoie 0. Cela ne le fait retourner 0 que lorsque la fin du script est atteinte. Par exemple, le script suivant renvoie toujours 3:

#!/bin/sh exit 3 exit 0 

Le Le script suivant renvoie également toujours un code derreur, en plus dafficher un message concernant une erreur de syntaxe:

#!/bin/sh } exit 0 

Le script suivant renvoie 1 ou 0 selon son premier argument:

#!/bin/sh if [ "$1" = "foo" ]; then exit 1 fi exit 0 

Le script suivant renvoie le statut de somecommand, depuis set -e provoque la fermeture du script si somecommand échoue:

#!/bin/sh set -e somecommand exit 0 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *