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 » |
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 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 [101] 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.
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 ».
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.