Codes de sortie sous Linux [Explained]


  • Français


  • Un code de sortie ou un état de sortie nous renseigne sur l’état de la dernière commande exécutée. Indique si la commande s’est terminée avec succès ou s’est terminée par une erreur. Ceci est obtenu après la fin de la commande.

    L’idéologie de base est que les programmes renvoient le code de sortie 0 pour indiquer qu’il s’est exécuté avec succès sans problèmes. Code 1 ou toute autre valeur que 0 est considérée comme un échec.

    Il existe de nombreux autres codes de sortie autres que 0 et 1, que je couvrirai dans cet article.

    Divers codes de sortie dans le shell Linux

    Jetons un coup d’œil aux principaux codes de sortie du shell Linux :

    Code de sortie Signification du code
    0 Commande exécutée sans erreur
    1 Code pour les erreurs génériques
    2 Utilisation incorrecte de la commande (ou de l’argument)
    126 Autorisation refusée (ou) impossible d’exécuter
    127 Commande introuvable ou erreur PATH
    128+n La commande s’est terminée en externe en transmettant des signaux, ou elle a rencontré une erreur fatale
    130 Terminaison par Ctrl+C ou SIGINT (code de terminaison 2 ou interruption clavier)
    143 Résiliation par SIGTERM (résiliation par défaut)
    255/* Le code de sortie a dépassé la plage 0-255, donc terminé

    📋

    Les signaux de terminaison comme 130 (SIGINT ou ^C) et 143 (SIGTERM) sont proéminents, qui sont juste 128+n signaux avec n représentant le code de terminaison.

    Maintenant que vous êtes brièvement familiarisé avec les codes de sortie, voyons leur utilisation.

    Récupération du code de sortie

    Le code de sortie de la commande précédemment exécutée est stocké dans la variable spéciale $?. Vous pouvez récupérer le statut de sortie en exécutant :

    echo $?

    Celui-ci sera utilisé dans toutes nos démonstrations pour récupérer le code de sortie.

    Notez que le sortie La commande prend en charge le port du même code de sortie que la commande précédente exécutée.

    Code de sortie 0

    Code de sortie 0 signifie que la commande est exécutée sans erreur. C’est idéalement le meilleur cas pour l’achèvement des commandes.

    Par exemple, exécutons une commande de base comme celle-ci

    neofetch 
    
    echo $?
    Code de sortie 0 (exécution réussie)

    Ce code de sortie 0 signifie que la commande particulière a été exécutée avec succès, ni plus ni moins. Démontrons quelques exemples supplémentaires.

    Vous pouvez essayer de tuer un processus ; il renverra également le code 0.

    pkill lxappearance
    Tuer une application (même shell) entraîne le code 0

    La visualisation du contenu d’un fichier renverra également un code de sortie 0, ce qui implique seul que la commande ‘cat’ s’est exécutée avec succès.

    Code de sortie 1

    Code de sortie 1 est également commun. Cela signifie généralement que la commande s’est terminée par une erreur générique.

    Par exemple, l’utilisation du gestionnaire de packages sans les autorisations sudo entraîne le code 1. Sous Arch Linux, si j’essaie ceci :

    pacman -Sy 

    Cela me donnera le code existant comme 1, ce qui signifie que la dernière commande a entraîné une erreur.

    code de sortie 1 (une opération non autorisée a entraîné ce code)
    État de sortie 1 (fonctionnement non autorisé)

    📋

    Si vous essayez ceci dans des distributions basées sur Ubuntu (apt update sans sudo), vous obtenez 100 comme code d’erreur pour exécuter ‘apt’ sans autorisations. Il ne s’agit pas d’un code d’erreur standardisé, mais d’un code spécifique à apt.

    Bien qu’il s’agisse d’une compréhension générale, nous pouvons également interpréter cela comme une “opération non autorisée”.

    Des opérations telles que la division par zéro entraînent également le code 1.

    La division par zéro donne le code 1
    Division par zéro

    Code de sortie 2

    Ce code de sortie est émis lorsque la commande exécutée comporte une erreur de syntaxe. Une mauvaise utilisation des arguments des commandes entraîne également cette erreur.

    Cela suggère généralement que la commande n’a pas pu s’exécuter en raison d’une utilisation incorrecte.

    Par exemple, j’ai ajouté deux traits d’union à une option censée en avoir un. Le code 2 a été distribué.

    grep --z file.txt
    Un argument non valide a généré le code de sortie 2
    L’argument invalide donne le code 2

    Lorsque l’autorisation est refusée, comme l’accès au dossier /root, vous obtenez le code d’erreur 2.

    L'autorisation refusée donne le code 2
    Permission refusée

    Indicatif de sortie 126

    126 est un code de sortie particulier car il est utilisé pour indiquer qu’une commande ou un script n’a pas été exécuté en raison d’une erreur d’autorisation.

    Cette erreur peut être détectée lorsque vous essayez d’exécuter un script shell sans donner les autorisations d’exécution.

    Code de sortie 126 en raison d’autorisations insuffisantes

    Notez que ce code de sortie n’apparaît que pour le ‘exécution‘ de scripts/commandes sans autorisations suffisantes, ce qui est différent d’une erreur générique d’autorisation refusée.

    Donc, ne le confondez pas avec l’exemple précédent que vous avez vu avec le code de sortie 2. Là, la commande ls s’est exécutée et le problème d’autorisation est venu avec le répertoire qu’il essayait d’exécuter. Ici, les problèmes d’autorisation provenaient du script lui-même.

    Indicatif de sortie 127

    C’est une autre commune. Le code de sortie 127 fait référence à “commande introuvable”. Cela se produit généralement lorsqu’il y a une faute de frappe dans la commande exécutée ou que l’exécutable requis ne se trouve pas dans la variable $PATH.

    Par exemple, je vois souvent cette erreur lorsque j’essaie d’exécuter un script sans son chemin.

    Script exécuté sans que le chemin donne "commande non trouvée" ou code 127
    Le script exécuté sans le chemin donne “commande introuvable”

    Ou lorsque le fichier exécutable que vous essayez d’exécuter n’est pas répertorié dans le $PATH variable. Vous pouvez rectifier cela en ajoutant le répertoire parent à la variable PATH.

    Comment ajouter un répertoire à PATH sous Linux

    Découvrez toutes les étapes essentielles pour ajouter un répertoire au PATH sous Linux et effectuer ces modifications de manière permanente.

    Vous obtiendrez également ce code de sortie lorsque vous tapez des commandes qui n’existent pas.

    Unmount n'est pas une commande et Screenfetch n'est pas installé, ce qui a entraîné le code 127
    Démonter n’est pas une commande, et Capture d’écran N’est pas installé

    Code de sortie série 128+n

    Lorsqu’une application ou une commande est terminée ou que son exécution échoue en raison d’une erreur fatale, le code adjacent à 128 est produit (128+n), où n est le numéro du signal.

    Cela inclut tous les types de codes de terminaison, comme SIGTERM, SIGKILLetc qui s’appliquent à la valeur ‘n’ ici.

    Code 130 ou SIGINT

    SIGINT ou Signernal pour clavier Interrupt est induit en interrompant le processus par le signal de fin 2, ou par Ctrl+C.

    Puisque le signal de terminaison est 2, nous obtenons un code 130 (128+2). Voici une vidéo montrant le signal d’interruption pour lxappearance.

    Terminaison SIGINT(2) ou Interruption clavier (^C) qui donne le code 130

    Code 137 ou SIGKILL

    Le SIGKILL Résiliation signernal que tuers le processus reçoit instantanément un signal de terminaison 9. C’est la dernière méthode à utiliser lors de la terminaison d’une application.

    Le code de sortie émis est 137 puisque le signal de terminaison est 9 (128+9).

    Terminaison SIGKILL(9) qui donne le code 137

    Code 143 ou SIGTERM

    SIGTERM ou Signernal à Termeinate est le comportement par défaut lorsqu’un processus est tué sans spécifier d’arguments.

    Le code de terminaison pour SIGTERM est 15, donc ce signal obtient un code de sortie de 143 (128+15).

    Terminaison SIGTERM(15) qui donne le code 143

    Il existe d’autres signaux de terminaison que vous ne connaissiez peut-être pas auparavant ; ils ont aussi leurs propres codes de sortie similaires à ceux-ci. Vous pouvez les consulter ici:

    Comment utiliser SIGINT et d’autres signaux de terminaison sous Linux

    Mettre fin au processus d’exécution est plus qu’un simple kill -9. Voici quelques-uns des principaux signaux de terminaison et leur utilisation.

    📋

    Notez que ces signaux peuvent ne pas apparaître s’ils sont terminés à partir de la même session à partir de laquelle le processus a été lancé. Si vous les reproduisez, terminez à partir d’un shell différent.

    A titre personnel, le signal 128 était impossible à reproduire.

    Que faire si le code dépasse 255 ?

    Les versions récentes de Bash conservent la valeur du code de sortie d’origine même au-delà de 255, mais généralement, si le code dépasse 255, il est terminé.

    Autrement dit, le code 256 devient ‘0’, 257 devient ‘1’, 383 devient ‘127’, et ainsi de suite. Pour assurer une meilleure compatibilité, conservez les codes de sortie entre 0 et 255.

    Emballer

    J’espère que vous avez appris quelque chose sur les codes de sortie dans le shell Linux. Leur utilisation peut être utile pour résoudre divers problèmes.

    Si vous utilisez ces codes dans un script shell, assurez-vous de comprendre la signification de chaque code afin de faciliter le dépannage.

    Si vous avez besoin d’une référence, consultez la série Bash ici :

    Bash Basics #1 : Créer et exécuter votre premier script shell Bash

    Commencez à apprendre les scripts bash avec cette nouvelle série. Créez et exécutez votre premier script shell bash dans le premier chapitre.

    C’est tout à propos de l’article. N’hésitez pas à me le faire savoir dans la section des commentaires si j’ai raté quelque chose.

    Source

    Houssen Moshinaly

    Pour contacter personnellement le taulier :

    Laisser un commentaire

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

    Copy code