D. Codes de sortie ayant une signification particulière

Tableau D.1. Codes de sortie réservés

Code de sortie Signification Exemple Commentaires
1 standard pour les erreurs générales let "var1 = 1/0" erreurs diverses, comme une « division par zéro » et autres opérations interdites
2 mauvaise utilisation de commandes intégrées, d'après la documentation de Bash   Rarement vue, généralement utilisation du code de sortie 1
126 la commande appelée ne peut s'exécuter   problème de droits ou commande non exécutable
127 « commande introuvable »   problème possible avec $PATH ou erreur de frappe
128 argument invalide pour exit exit 3.14159 exit prend seulement des arguments de type entier compris entre 0 et 255 (voir la première note de bas de page)
128+n signal « n » d'erreur fatale kill -9 $PPID d'un script $? renvoie 137 (128 + 9)
130 script terminé avec Control-C   Control-C est le signal 2 d'erreur fatale (130 = 128 + 2, voir ci-dessus)
255* code de sortie en dehors de la limite exit -1 exit prend seulement des arguments de type entier compris entre 0 et 255

D'après la table ci-dessus, les codes de sortie 1 - 2, 126 - 165, et 255 [115] ont une signification particulière et devraient donc être évités pour les paramètres de sortie définis par l'utilisateur. Finir un script avec exit 127 va certainement causer une certaine confusion lors du débogage (est-ce que le code d'erreur est « commande introuvable » ou une erreur définie par l'utilisateur ?). Néanmoins, beaucoup de scripts utilisent un exit 1 comme code de sortie générique en cas d'erreur. Le code de sortie exit 1 est utilisé dans tellement de cas d'erreur que cela ne sera pas très utile pour le débogage.

Il y a eu un essai de normalisation des codes de sortie (voir /usr/include/sysexits.h) mais il avait pour cible les programmeurs C et C++. Un standard similaire pour la programmation de script pourrait être approprié. L'auteur de ce document propose de restreindre les codes de sortie définis par l'utilisateur à l'intervalle 64 - 113 (en plus du code 0 en cas de succès) pour se conformer au standard C/C++. Ceci permettrait 50 codes valides et faciliterait le débogage des scripts. [116] Tous les codes de sortie définis par l'utilisateur dans les exemples accompagnant ce document se conforment maintenant à ce standard, sauf dans les cas de redéfinition comme dans l'Exemple 9.2, « Saisie avec délai ».

[Note]

Note

Lancer un $? à partir de la ligne de commande après un script shell donne des résultats cohérents avec la table ci-dessus seulement à partir de l'invite Bash ou sh. L'utilisation de cette commande dans un shell C ou tcsh peut donner d'autres valeurs dans certains cas.



[115] Des valeurs de sortie en dehors de limites peuvent donner des codes de sortie inattendus. Un code de sortie plus grand que 255 renvoie ce code modulo 256. Par exemple, exit 3809 donne un code de sortie 225 (3809 % 256 = 225).

[116] Une mise à jour de /usr/include/sysexits.h alloue des codes de sortie auparavant inutilisés, de 64 à 78. Il semble que l'ensemble des codes de sortie pourront être encore plus restreints dans le futur. L'auteur de ce document ne fera pas de corrections sur les exemples de scripts pour se conformer au standard changeant. Ceci ne doit pas causer de problème car il n'y a pas de surcharge ou de conflit dans les codes de sorties utilisés entre des binaires C/C++ compilés et les scripts shell.