127 Code retour à partir de $?

291

Quelle est la valeur de la valeur de retour 127 de $? sous UNIX.

Sachin Chourasiya
la source

Réponses:

428

La valeur 127 est renvoyée par /bin/shlorsque la commande donnée est introuvable dans votre PATHvariable système 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.

Vieille école
la source
55
Cela se produit également si un script bash n'a pas le mode "+ x" mais existe bel et bien.
MatthewKremer
3
Vous pouvez essayer d'utiliser which [program]pour voir quel binaire le système d'exploitation utilise. S'il apparaît vide, l'étape suivante consiste à vérifier le bit d'exécution et le CHEMIN.
four43
10
@ cr125rider, whichn'est pas particulièrement précis - il ne connaît pas les alias, les fonctions du shell, la mémorisation de la recherche PATH ou d'autres facteurs internes à l'état du shell. Beaucoup mieux à utiliser type, un shell intégré qui connaît toutes ces choses.
Charles Duffy
5
Cela m'est également arrivé avec un fichier contenant des sauts de ligne Windows. La correction des fins de ligne au format Unix a résolu le problème
Mitkins
4
@MatthewKremer: En fait, j'obtiens 126( Permission denied), pas 127lorsque j'essaie d'invoquer un fichier non exécutable (quel que soit son contenu); de même, une tentative d'exécution d'un répertoire entraîne également 126( is a directory).
mklement0
58

Cela signifie généralement:

127 - commande introuvable

mais cela peut également signifier que la commande est trouvée ,
mais qu'une bibliothèque requise par la commande n'est PAS trouvée .

okigan
la source
14

127 - command not found

exemple: $ caat Le message d'erreur

frapper:

caat: commande introuvable

maintenant vous vérifiez en utilisant echo $?

Anitha Mani
la source
10

Une convention shell est qu'un exécutable réussi doit sortir avec la valeur 0. Tout le reste peut être interprété comme un échec quelconque, de la part de bash ou de l'exécutable que vous venez d'exécuter. Voir aussi $ PIPESTATUS et la section EXIT STATUS de la page de manuel 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.
apbianco
la source
8

Cela n'a pas de signification particulière, à part que le dernier processus de sortie l'a fait avec un statut de sortie de 127.

Cependant, il est également utilisé par bash (en supposant que vous utilisez bash comme shell) pour vous dire que la commande que vous avez essayé d'exécuter n'a pas pu être exécutée (c'est-à-dire qu'elle n'a pas pu être trouvée). Ce n'est malheureusement pas immédiatement déductible si le processus s'est terminé avec le statut 127 ou s'il n'a pas pu être trouvé.

EDIT:
Pas immédiatement déductible, sauf pour la sortie sur la console, mais c'est un débordement de pile, donc je suppose que vous le faites dans un script.

falstro
la source
2

Cette erreur est aussi parfois trompeuse. Il indique que le fichier est introuvable même si les fichiers sont effectivement présents. Cela pourrait être dû à des caractères spéciaux illisibles non valides présents dans les fichiers qui pourraient être causés par l'éditeur que vous utilisez. Ce lien peut vous aider dans de tels cas.

-bash: ./my_script: / bin / bash ^ M: mauvais interprète: aucun fichier ou répertoire de ce type

La meilleure façon de savoir s'il s'agit de ce problème est de simplement placer une instruction echo dans le fichier entier et de vérifier si la même erreur est levée.

Rama Sastry
la source
1

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');
pseudo
la source
Merci, cela a fonctionné pour moi. J'ai donc fait quel gs puis utilisé le chemin de sortie dans mon script. A travaillé ..
Juan
0

Si le JCL IBM mainframe contient des caractères ou des chiffres supplémentaires à la fin du nom du script Unix appelé, il peut générer une telle erreur.

Codeur intelligent
la source