Qu'est-ce qu'un code de sortie
Chaque script, commande ou fichier binaire se termine avec un code de retour. Vous pouvez voir cette valeur dans la variable spéciale $ ? . Les codes de retour sont numériques et se limitent à être compris entre 0 et 255 car un entier non signé de 8 bits est utilisé. Si vous utilisez une valeur de -1, il renverra 255. Chaque exécution se termine par un code de sortie, qu'elle réussisse ou non, par un message d'erreur ou silencieusement. Par exemple :
$ date ; echo $? Sat Jan 18 08:06:07 IST 2020 0
Comme vous pouvez le voir, le code de sortie est 0 car la commande a été exécutée sans problème. Maintenant, essayons ceci :
$ wrngcmd ; echo $? -bash: wrngcmd: command not found 127
C'est une commande introuvable car nous venons de taper un tas de caractères sans signification.
Codes de sortie Bash réservés
Si similaire au code de sortie "0" qui indique le succès de la commande, bash a des codes de sortie réservés pour différentes situations. Donc, idéalement, si vous utilisez la commande exit dans un script et que vous devez spécifier un code de sortie, n'utilisez pas ces codes de sortie réservés car ils peuvent créer des résultats contradictoires.
Numéro de code de sortie | Signification | Exemple | Commentaires |
---|---|---|---|
1 | Catchall pour les erreurs générales | soit "var1 =1/0" | Erreurs diverses, telles que "diviser par zéro" et autres opérations non autorisées |
2 | Mauvaise utilisation des commandes internes du shell | fonction_vide() {} | Mot-clé ou commande manquant |
126 | La commande invoquée ne peut pas s'exécuter | /dev/null | Problème d'autorisation ou la commande n'est pas un exécutable |
127 | « commande introuvable » | illegal_command | Problème possible avec $PATH ou une faute de frappe |
128 | Argument invalide pour quitter | sortie 3.14159 | exit ne prend que des arguments entiers compris entre 0 et 255 (voir la première note de bas de page) |
128 +n | Signal d'erreur fatale "n" | tuer -9 $PPID du script | $ ? renvoie 137 (128 + 9) |
130 | Script terminé par Control-C | Ctrl-C | Control-C est le signal d'erreur fatale 2, (130 =128 + 2, voir ci-dessus) |
255* | État de sortie hors limites | sortie -1 | exit ne prend que des arguments entiers compris entre 0 et 255 |
Comprenons le code de sortie "128 + n" avec un exemple. Exécutez la boucle sans fin comme indiqué ci-dessous :
#!/bin/bash while true; do echo ${$} done
Si vous exécutez ce script, il imprimera le même PID indéfiniment jusqu'à ce que vous le tuiez ou que vous fassiez un "CTRL+C". Essayons de faire un "CTRL + C" et voyons quel est le code de sortie.
# sh test.sh .... 2582 2582 2582 2582 2582 2582 ^C geeklab$ echo $? 130
Comme vous pouvez le voir, le code de sortie est "128 + 2" c'est-à-dire 130. De même, si nous tuons le script en utilisant "kill -9", le code de sortie devrait être "128 + 9" c'est-à-dire 137. Voyons un exemple de cela aussi :
# sh test.sh .... 2582 2582 2582 ...
# kill -9 [pid_of_script]
.... 2602 2602 Killed: 9 geeklab$ echo $? 137