You Can Troubleshoot Faster With Linux Exit Codes

Table des matières

Les codes de sortie, également appelés codes de retour ou statuts de sortie, sont des signaux numériques qu'un programme, une commande ou un script renvoie au système d'exploitation (ou processus d'appel) à sa fin. Vous n'avez pas besoin de creuser à travers des fichiers journaux potentiellement longs pour diagnostiquer une défaillance – un code de sortie fournit souvent un indice rapide sur la nature du problème.

La convention universellement acceptée est que lorsqu'un programme s'exécute avec succès, il renvoie un code de sortie de 0. Tout autre numéro, généralement dans la plage standard de 1 à 255, indique que quelque chose s'est mal passé.

La façon la plus simple de vérifier le code de sortie de la dernière commande de premier plan exécutée dans les coquilles de type UNIX (telles que bash ou zsh) est de inspecter la variable de coquille spéciale $?. Par exemple, exécutez d'abord n'importe quelle commande, puis vérifiez son code de sortie:

ls /nonexistent_directory
echo $?

L'écho $? La commande affiche le code de sortie numérique stocké dans le $? variable. Si vous voyez 0, cela signifie que la commande précédente s'est terminée avec succès. Une valeur non nulle comme 1, 2 ou 127 indique une erreur, et le nombre spécifique offre un indice sur le type de problème – peut-être un fichier manquant, un répertoire inexistant ou des autorisations insuffisantes.

Débogage de votre script avec les codes de sortie

Les codes de sortie sont particulièrement utiles lorsque vous écrivez des scripts shell. Ils aident votre script à déterminer si quelque chose s'est bien passé, ce qui lui permet de décider quoi faire ensuite.

Voici un exemple simple qui copie un fichier dans un dossier de sauvegarde et rapporte si la copie a été réussie:

#!/bin/bash
# Try to copy the file
cp important_file.txt backup/
# Check if the copy was successful using the exit code ($? holds the exit code from the last command)
if ( $? -eq 0 ); then
echo "Backup successful!"
else
echo "Backup failed with exit code $?"
exit 1 # Exit the script with an error code to indicate something went wrong.
fi

Quand le cp La commande s'exécute, il renvoie un code de sortie. Un code de sortie de 0 signifie que tout s'est bien passé. Si le code n'est pas 0, quelque chose s'est mal passé – et le script imprime un message d'erreur et sort avec un code de 1.

Définition de vos propres codes de sortie

En plus de vérifier les codes de sortie des commandes, vous pouvez définir vos propres codes de sortie pour indiquer différents types d'erreurs. Cette pratique rend vos scripts plus informatifs, permettant à quiconque de les utiliser pour comprendre exactement quel type de problème s'est produit.

Considérez ce script:

#!/bin/bash
# Verify that an argument (filename) is provided.
if ( -z "$1" ); then
echo "Usage: $0 <filename>"
exit 1 # Exit code 1 indicates that no argument was provided.
fi
# Check if the file provided as the first argument exists.
if ( ! -f "$1" ); then
echo "Error: File not found"
exit 2 # Custom exit code 2 indicates that the file was not found.
fi

Si quelqu'un exécute votre script et qu'il échoue, il peut se référer au code de sortie pour déterminer l'erreur exacte. Dans cet exemple, le code de sortie 1 indique que l'utilisateur n'a pas fourni d'argument requis, tandis que le code de sortie 2 indique explicitement que le fichier n'a pas été trouvé. Cette approche structurée est particulièrement utile lorsque votre script fait partie d'un système plus grand ou lorsqu'un autre script dépend de sa sortie.

Liste des codes de sortie communs

Bien que différents programmes puissent définir leurs propres codes de sortie, il existe certains modèles communs que vous verrez sur de nombreux outils de ligne de commande – en particulier dans les systèmes Linux et Unix. Voici quelques-uns des plus fréquemment rencontrés:

  • 0: Tout va bien! Le programme s'est déroulé sans aucun problème.
  • 1: Quelque chose s'est mal passé, mais l'erreur n'est pas spécifique. C'est comme le fourre-tout des codes de sortie.
  • 2: Abus de coquilles de construction. Cela peut se produire si vous utilisez une commande de manière incorrecte, comme l'oubli des paramètres requis.
  • 126: La commande existe, mais vous n'avez pas la permission de l'exécuter.
  • 127: Commande introuvable. Cela signifie que la commande n'existe pas ou n'est pas dans le chemin du système. Vérifiez votre orthographe.
  • 128: Argument de sortie non valide. Vous avez utilisé un nombre qui n'a pas de sens comme code de sortie.
  • 130: Le programme terminé par Ctrl + C. Cela se produit lorsque vous arrêtez manuellement un programme.
  • 137: Condition hors de la mémoire (OOM).
  • 255: Le programme a tenté de renvoyer un code de sortie à l'extérieur de la plage valide.

Certains programmes spécifiques ont leurs propres codes de sortie uniques. Par exemple, Grep renvoie 0 lorsqu'il trouve des correspondances, 1 lorsqu'il ne trouve aucune correspondance et 2 en cas d'erreur. De plus, les développeurs peuvent techniquement utiliser presque n'importe quel nombre (généralement 0 à 255 sur des systèmes de type UNIX).

Commandes de chaînage basées sur le succès ou l'échec

Bash fournit également deux opérateurs pratiques && et || qui vous permettent de chaîner les commandes ensemble selon que la précédente a réussi ou échoué:

  • && (et opérateur): exécute la commande suivante uniquement si la précédente a réussi (code de sortie 0).
  • || (Ou opérateur): exécute la commande suivante uniquement si la précédente a échoué (code de sortie non nul).

Par exemple, supposons que vous souhaitiez créer un répertoire, puis le changer immédiatement. Si la création du répertoire échoue ou ne change pas, vous ne souhaitez peut-être afficher un message d'erreur:

mkdir new_directory && cd new_directory || echo "Failed to create and access directory"

Ici, mkdir new_directory essaie de créer le dossier. Si cela fonctionne, le code s'exécute immédiatement cd new_directory. Si l'une ou l'autre étape échoue, le || L'opérateur entre en jeu et imprime le message d'erreur.

Réflexions finales

Les codes de sortie peuvent sembler un petit détail, mais ils font partie de ce qui rend les outils de ligne de commande si puissants. Ils créent un langage commun pour que des programmes communiquent sur le succès et l'échec, ce qui est essentiel pour la construction de systèmes complexes.

Si vous êtes nouveau dans le travail en ligne de commande, commencez par prendre l'habitude de vérifier echo $? Lorsque les commandes ne se comportent pas comme prévu. Bientôt, vous utiliserez des codes de sortie dans vos propres scripts et vous apprécierez ce système de communication simple mais efficace.

Partager :
Facebook
Twitter
LinkedIn

Gentil Geek

Passionné d'informatique depuis ma plus tendre enfance aujourd'hui j'en ai fait mon métier. A vos côtés pour simplifier votre utilisation de l'informatique et vous permettre de gagner en compétences.

Poster le commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *