127 Rückkehrcode von $?

291

Was bedeutet der Rückgabewert 127 von $? unter UNIX.

Sachin Chourasiya
quelle

Antworten:

428

Der Wert 127 wird zurückgegeben, /bin/shwenn der angegebene Befehl nicht in Ihrer PATHSystemvariablen gefunden wird und es sich nicht um einen integrierten Shell-Befehl handelt. Mit anderen Worten, das System versteht Ihren Befehl nicht, weil es nicht weiß, wo sich die Binärdatei befindet, die Sie aufrufen möchten.

Alte Schule
quelle
55
Dies passiert auch, wenn ein Bash-Skript nicht den Modus "+ x" hat, aber tatsächlich existiert.
Matthew Kremer
3
Sie können versuchen, mit which [program]zu sehen, welche Binärdatei das Betriebssystem verwendet. Wenn es leer ist, überprüfen Sie im nächsten Schritt das Ausführungsbit und den Pfad.
Four43
10
@ cr125rider whichist nicht besonders genau - es kennt keine Aliase, Shell-Funktionen, PATH-Lookup-Memoization oder andere Faktoren innerhalb des Shell-Status. Viel besser zu bedienen type, eine Shell eingebaut, die über all diese Dinge Bescheid weiß.
Charles Duffy
5
Dies passierte mir auch mit einer Datei mit Windows-Zeilenvorschüben. Das Korrigieren der Zeilenenden im Unix-Format löste das Problem
Mitkins
4
@MatthewKremer: Eigentlich bekomme ich 126( Permission denied), nicht 127wenn ich versuche, eine nicht ausführbare Datei aufzurufen (unabhängig von deren Inhalt); In ähnlicher Weise führt ein Versuch, ein Verzeichnis auszuführen, auch zu 126( is a directory).
mklement0
58

Im Allgemeinen bedeutet es:

127 - Befehl nicht gefunden

Es kann aber auch bedeuten, dass der Befehl gefunden wird ,
aber eine Bibliothek, die für den Befehl erforderlich ist, wird NICHT gefunden .

Okigan
quelle
14

127 - command not found

Beispiel: $ caat Die Fehlermeldung wird angezeigt

Bash:

caat: Befehl nicht gefunden

Jetzt überprüfen Sie mit echo $?

Anitha Mani
quelle
10

Eine Shell-Konvention besagt, dass eine erfolgreiche ausführbare Datei mit dem Wert 0 beendet werden sollte. Alles andere kann als Fehler irgendeiner Art von Bash oder der gerade ausgeführten ausführbaren Datei interpretiert werden. Siehe auch $ PIPESTATUS und den Abschnitt EXIT STATUS der Bash-Manpage:

   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
quelle
8

Es hat keine besondere Bedeutung, außer dass der letzte zu beendende Prozess dies mit einem Exit-Status von 127 tat.

Es wird jedoch auch von bash verwendet (vorausgesetzt, Sie verwenden bash als Shell), um Ihnen mitzuteilen, dass der Befehl, den Sie ausführen wollten, nicht ausgeführt werden konnte (dh nicht gefunden wurde). Es ist leider nicht sofort ableitbar, ob der Prozess mit dem Status 127 beendet wurde oder ob er nicht gefunden werden konnte.


BEARBEITEN : Nicht sofort ableitbar, mit Ausnahme der Ausgabe auf der Konsole, aber dies ist ein Stapelüberlauf. Ich gehe also davon aus, dass Sie dies in einem Skript tun.

falstro
quelle
2

Dieser Fehler täuscht auch manchmal. Es heißt, dass die Datei nicht gefunden wurde, obwohl die Dateien tatsächlich vorhanden sind. Dies kann an ungültigen, nicht lesbaren Sonderzeichen in den Dateien liegen, die durch den von Ihnen verwendeten Editor verursacht werden können. Dieser Link kann Ihnen in solchen Fällen helfen.

-bash: ./my_script: / bin / bash ^ M: fehlerhafter Interpreter: Keine solche Datei oder kein solches Verzeichnis

Der beste Weg, um herauszufinden, ob es sich um dieses Problem handelt, besteht darin, einfach eine Echo-Anweisung in die gesamte Datei einzufügen und zu überprüfen, ob derselbe Fehler ausgelöst wird.

Rama Sastry
quelle
1

Wenn Sie versuchen, ein Programm mit einer Skriptsprache auszuführen , müssen Sie möglicherweise den vollständigen Pfad der Skriptsprache und die auszuführende Datei angeben. Zum Beispiel:

exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');
Nick
quelle
Danke, das hat bei mir funktioniert. Also habe ich welches gs gemacht und dann den Ausgabepfad in meinem Skript verwendet. Arbeitete ..
Juan
0

Wenn die IBM Mainframe-JCL am Ende des Namens des aufgerufenen Unix-Skripts einige zusätzliche Zeichen oder Zahlen enthält, kann dies zu einem solchen Fehler führen.

Smart Coder
quelle