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 des commandes intégrées (d'après la documentation de Bash) | fonction_vide() {} | Mot-clé manquant ou commande |
126 | la commande appelée ne peut s'exécuter | problème de droits ou commande non exécutable | |
127 | « commande introuvable » | commande_incorrecte | 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 [141] 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 scripts 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. [142] 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 un délai ».
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.
[141] 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).
[142] 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.