377 Stimmen

127 Rückgabecode von $?

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

3voto

Nick Punkte 10094

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

exec('/usr/local/bin/node /usr/local/lib/node_modules/uglifycss/uglifycss in.css > out.css');

2voto

Rama Sastry Punkte 21

Auch dieser Irrtum ist bisweilen trügerisch. Er besagt, dass die Datei nicht gefunden wurde, obwohl die Datei tatsächlich vorhanden ist. Es könnte an ungültigen, nicht lesbaren Sonderzeichen in den Dateien liegen, die durch den von Ihnen verwendeten Editor verursacht werden könnten. Dieser Link könnte Ihnen in solchen Fällen helfen.

-bash: ./my_script: /bin/bash^M: schlechter Interpreter: Keine solche Datei oder Verzeichnis

Der beste Weg, um herauszufinden, ob es sich um dieses Problem handelt, ist, einfach eine echo-Anweisung in die gesamte Datei einzufügen und zu überprüfen, ob derselbe Fehler auftritt.

0voto

Smart Coder Punkte 901

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

0voto

armanexplorer Punkte 15

Zusätzlich zu den gegebenen Antworten ist zu beachten, dass die Ausführung einer Skriptdatei mit falschen Zeilenendezeichen auch zu folgenden Ergebnissen führen kann 127 Exit-Code, wenn Sie /bin/sh als Ihre Hülle.

Wenn Sie beispielsweise ein Shell-Skript mit CRLF-Zeilenendezeichen in einem UNIX-basierten System ausführen und in der /bin/sh Shell kann es zu Fehlern wie dem folgenden kommen, den ich nach der Ausführung meines Skripts namens my_test.sh :

$ ./my_test.sh
sh: 2: ./my_test.sh: not found
$ echo $?
127

Als Anmerkung: Die Verwendung von /bin/bash habe ich 126 Exit-Code, der im Einklang steht mit gnu.org Dokumentation über die bash :

Wenn ein Befehl nicht gefunden wird, gibt der Kindprozess, der zur Ausführung des Befehls erstellt wurde, einen Status von 127 . Wenn ein Befehl gefunden wird, aber nicht ausführbar ist, lautet der Rückgabestatus 126 .

Schließlich ist hier das Ergebnis der Ausführung meines Skripts in /bin/bash :

arman@Debian-1100:~$ ./my_test.sh
-bash: ./my_test.sh: /bin/bash^M: bad interpreter: No such file or directory
arman@Debian-1100:~$ echo $?
126

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X