Was bedeutet der Rückgabewert 127 von $? unter UNIX.
Was bedeutet der Rückgabewert 127 von $? unter UNIX.
Antworten:
Der Wert 127 wird zurückgegeben, /bin/sh
wenn der angegebene Befehl nicht in Ihrer PATH
Systemvariablen 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.
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.
which
ist 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ß.
126
( Permission denied
), nicht 127
wenn 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
).
127 - command not found
Beispiel: $ caat Die Fehlermeldung wird angezeigt
Bash:
caat: Befehl nicht gefunden
Jetzt überprüfen Sie mit echo $?
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.
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.
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.
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.
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');
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.