Les codes de sortie sous Linux sont un outil puissant qui aide les développeurs à améliorer la qualité du code et à éviter les erreurs courantes. Lorsque des commandes sont exécutées dans le terminal, ces codes renvoient des valeurs spécifiques qui indiquent si l'opération a réussi ou échoué, permettant aux programmeurs de détecter rapidement les problèmes et de les résoudre efficacement.
La compréhension de ces codes peut réduire le temps de débogage et augmenter la fiabilité du logiciel. Que vous soyez débutant ou professionnel, la maîtrise du code de sortie vous donnera un meilleur contrôle sur votre flux de programmation et améliorera les performances des applications que vous développez.
Sommaire
- Chaque commande sous Linux renvoie un code de sortie, où 0 indique le succès et les valeurs non nulles indiquent l'échec.
- Vous pouvez utiliser la variable $? Pour accéder au code de sortie et contrôler le flux du programme dans les scripts.
- Méfiez-vous des codes de sortie non conventionnels qui varient d’une commande à l’autre, tels que diff et curl.
Chaque commande sous Linux affichera des messages d'erreur en cas d'échec, mais il est difficile de se fier à ces informations. Vos scripts doivent utiliser des codes de sortie pour être aussi robustes que possible.
Quels sont les codes de sortie ?
Lors de l'exécution d'une commande Linux, celle-ci peut échouer. Des erreurs peuvent survenir pour diverses raisons, mais vous verrez généralement un message expliquant la raison :
Le message d'erreur que vous voyez apparaît dans STDERR, un chemin différent de STDOUT, vous permettant d'isoler les erreurs de la sortie attendue. En tant qu'utilisateur, la description de l'erreur devrait être utile, mais les scripts et autres processus automatisés devraient être plus fiables quant à la détection des erreurs.
En plus des messages d’erreur évidents, chaque commande renvoie un code de sortie. Il s'agit d'un nombre compris entre 0 et 255, indiquant si la commande a échoué ou réussi. Par défaut, l'icône de sortie est masquée, mais votre interface de ligne de commande permet d'accéder à cette valeur dans la variable spéciale $?
Notez qu'une valeur de 0 indique un succès et une valeur différente de zéro indique un échec. Vous pouvez vérifier cette valeur via la ligne de commande, l'examiner dans un script et l'utiliser pour contrôler le flux de vos programmes.
Comment utiliser les codes de sortie ?
Dans l'exemple ci-dessus, la commande ls a renvoyé un code de sortie de 0 en cas de réussite et de 1 lorsque son argument n'était pas valide. Cela peut sembler contre-intuitif et contredit les langages de programmation traditionnels qui traitent 0 comme faux et 1 comme vrai. Cependant, ce paramètre permet une valeur de réussite globale unique et une large gamme de valeurs pour représenter différents types d'erreurs.
En plus de répéter la variable $? Pour vérifier manuellement l'état de sortie, vous pouvez l'utiliser avec une instruction if conditionnelle. Si la commande renvoie un état de sortie de 0, l'instruction de bloc then associée est exécutée. Sinon, s'il est trouvé, le bloc else sera exécuté. Par exemple:
if command; then echo "command succeeded"; else echo "command failed"; fi
Vous pouvez utiliser cette construction dans un script shell, où il est un peu plus facile de la formater pour une meilleure lisibilité :
if command
then echo "command succeeded"
else echo "command failed"
fi
Ceci est équivalent à :
command
if [ $? -eq 0 ]
then echo "command succeeded"
else echo "command failed"
fi
La version plus longue utilise la syntaxe entre crochets pour tester la valeur de $?, mais il est généralement plus facile de tester la valeur directement, comme dans le premier cas. Tu te souviens de ça ? Il représente toujours le symbole de sortie de la dernière commande, alors soyez prudent. La valeur du $ pourrait vous tenter ? Pour corriger, par exemple.
command
echo "command returned exit code:" $?
if [ $? -eq 0 ]
then echo "command succeeded"
else echo "command failed"
fi
Mais lorsque la condition est vérifiée, la valeur de $? sera égal à l'état de sortie de l'écho, qui est presque certainement 0. Pour éviter cela, testez directement dans la condition ou stockez la valeur de $? En variable.
Que dois-je savoir d’autre sur le statut de sortie ?
Les codes de sortie sont très simples, suivant les principes Unix, et c'est là une partie de leur puissance. Mais il existe certaines erreurs et exceptions dont vous devez être conscient.
Codes de sortie Shell
Le shell utilisera des codes de sortie même si la commande que vous tapez ne fonctionne pas correctement. Par exemple, zsh et bash utilisent tous deux 127 si la commande n'est pas trouvée et 126 si la commande n'est pas exécutable :
Codes de sortie non conventionnels
Certaines commandes enfreignent un peu les règles d’état de sortie ; Ce ne sont en réalité que des conventions. Par exemple, la commande diff utilise la valeur 0 pour indiquer « aucune différence », la valeur 1 pour indiquer « des différences » et la valeur 2 pour indiquer une erreur :
Cela peut entraîner une confusion quant à la signification des conditionnels ; Par exemple:
if diff file1 file2; then
echo these files are the same!
fi
La commande curl est un peu peu intuitive. Vous pourriez vous attendre à ce que curl signale une erreur HTTP, telle qu'une erreur 404 pour une URL introuvable, sous la forme d'un code d'état différent de zéro, mais ce n'est pas le cas :
Vous pouvez utiliser l'option -f (–fail) pour que curl se comporte différemment et renvoie un code de sortie de 22 en cas d'échec :
Cependant, sachez que cela n’est pas totalement infaillible, car certaines erreurs HTTP, y compris celles nécessitant une authentification, renverront toujours un code de sortie de 0.
Utilisation de l'état de sortie dans une chaîne de commandes
Vous pouvez facilement accéder à l’un des meilleurs raccourcis d’état de sortie sans avoir à réfléchir. Voici un exemple simple :
ls program && ./program && echo success || echo epic fail
Les opérateurs logiques && et || vous permet de : Exécuter plusieurs commandes en fonction de l'état de sortie d'autres commandes. Ils sont similaires aux opérateurs correspondants dans la plupart des langages de programmation, sauf qu'ils adhèrent à la convention du code de sortie. L'opérateur && exécute la commande à sa droite uniquement si l'état de sortie de la commande à sa gauche est zéro. Le || L'opérateur exécute uniquement la commande à sa droite si la commande à sa gauche échoue avec une condition différente de zéro.
Une situation très courante se produit lors de la création d'un programme à partir de zéro, en utilisant cette recette :
./configure && make && make install
Les trois parties de cette commande effectuent les opérations suivantes :
- ./configure Exécute un script local qui vérifie votre environnement et crée un Makefile.
- make exécute le programme Make et construit le programme à l'aide d'un Makefile.
- make install copie l'exécutable généré vers un chemin connu tel que /usr/local/bin.
Si une partie de ce processus échoue, il s’arrêtera immédiatement sans tenter d’effectuer le reste.
vrai et faux
Linux a deux commandes étranges : true et false. Aucun des deux ne fait rien, sauf renvoyer un code de sortie approprié : 0 et 1, respectivement.
Ces commandes peuvent ne pas sembler très utiles, mais elles sont utiles pour les tests et certaines tâches de script shell. Vous pouvez utiliser true dans une instruction while pour créer une boucle infinie :
tout en oui
do
echo courir jusqu'à ce que tu ^c
sommeil 10
fait
Vous pouvez également les utiliser avec des opérateurs logiques pour modifier le comportement des commandes. Par exemple, vous pouvez mettre en pause une longue séquence de commandes :
false && (none || of-these && commands || will-run)
Ou vous pouvez forcer la chaîne de commandes à continuer à s'exécuter, même si l'une des commandes échoue :
cat file-that-may-not-exist | true && echo done
Renvoyez le code de sortie de vos scripts
Vous avez peut-être utilisé la commande exit pour quitter le terminal. Techniquement, cette commande quitte la fenêtre de commande, ce qui signifie que vous pouvez également l'utiliser pour arrêter un script. Par défaut, vos scripts afficheront le même code que la dernière commande :
Mais vous pouvez modifier le code de sortie en passant un paramètre numérique à la commande de sortie :
exit number
Le script affichera désormais le code d'état que vous avez saisi et vous pourrez l'utiliser pour informer les autres des différents états d'erreur de votre programme.
Une fois que vous connaissez les commandes de sortie, vous les trouverez faciles à utiliser. Vous pouvez les utiliser sans même y penser, mais lorsque vous utilisez des scripts, assurez-vous d'utiliser correctement les codes de sortie.
Les codes de sortie sous Linux sont un élément essentiel dans le développement de logiciels robustes et efficaces. En le comprenant bien, vous pouvez améliorer les performances des applications et réduire considérablement les erreurs logicielles. Commencez à tester ces codes dans vos prochains projets et remarquez la différence de qualité et de vitesse d’exécution.
Avez-vous déjà été confronté à un problème avec les codes de sortie ? Partagez votre expérience dans les commentaires !












