Quelle est la signification de la valeur de retour 127 à partir de $? sous UNIX.
La valeur 127 est renvoyée par /bin/sh
lorsque la commande donnée n'est pas trouvée dans votre variable système PATH
et qu'il ne s'agit pas d'une commande Shell intégrée. En d'autres termes, le système ne comprend pas votre commande, car il ne sait pas où trouver le binaire que vous essayez d'appeler.
Généralement cela signifie:
127 - commande non trouvée
mais cela peut aussi signifier que la commande est trouvée,
mais une bibliothèque requise par la commande n'est PAS trouvée.
127 - command not found
exemple: $ caat Le message d'erreur
frapper:
caat: commande non trouvée
maintenant, vous vérifiez avec echo $?
Selon la convention du shell, l'exécutable doit sortir avec la valeur 0. Tout le reste peut être interprété comme un échec quelconque, que ce soit sur bash ou sur l'exécutable que vous venez d'exécuter. Voir aussi $ PIPESTATUS et la section EXIT STATUS de la page de manuel de bash:
For the Shell’s purposes, a command which exits with a zero exit status has succeeded. An exit status of zero indicates success. A non-zero exit status indicates failure. When a command terminates on a fatal signal N, bash uses the value of 128+N as the exit status.
If a command is not found, the child process created to execute it returns a status of 127. If a com-
mand is found but is not executable, the return status is 126.
If a command fails because of an error during expansion or redirection, the exit status is greater than
zero.
Shell builtin commands return a status of 0 (true) if successful, and non-zero (false) if an error
occurs while they execute. All builtins return an exit status of 2 to indicate incorrect usage.
Bash itself returns the exit status of the last command executed, unless a syntax error occurs, in
which case it exits with a non-zero value. See also the exit builtin command below.
Cela n'a pas de signification particulière, sauf que le dernier processus à quitter l'a fait avec un statut de sortie de 127.
Cependant, il est également utilisé par bash (si vous utilisez bash en tant que shell) pour vous informer que la commande que vous avez essayé d’exécuter ne peut pas être exécutée (c’est-à-dire qu’elle est introuvable). Malheureusement, cela n'est pas immédiatement déductible, si le processus s'est terminé avec le statut 127 ou s'il n'a pas pu être trouvé.
MODIFIER:
Pas immédiatement déductible, sauf pour la sortie sur la console, mais il s’agit d’un débordement de pile, donc je suppose que vous le faites dans un script.
Si vous essayez d'exécuter un programme à l'aide d'un langage de script, vous devrez peut-être inclure le chemin d'accès complet du langage de script et le fichier à exécuter. Par exemple:
exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
Si le JCL de l'ordinateur central IBM comporte des caractères ou des chiffres supplémentaires à la fin du nom du script unix appelé, il peut générer une telle erreur.
Cette erreur est parfois trompeuse. Il est indiqué que le fichier n’est pas trouvé même s’il est effectivement présent. Cela pourrait être dû à des caractères spéciaux illisibles non lisibles présents dans les fichiers qui pourraient être causés par l'éditeur que vous utilisez. Ce lien pourrait vous aider dans de tels cas.
- bash: ./my_script:/bin/bash ^ M: interprète incorrect: aucun fichier ni répertoire de ce type
Le meilleur moyen de savoir s’il s’agit de ce problème est de placer simplement une instruction echo dans l’ensemble du fichier et de vérifier si la même erreur est renvoyée.