Ihre interaktive Shell ist dash
(verkleidet als sh
). Die dash
Shell sagt
sh: /usr/local/bin/wait-for: not found
wenn es versucht, ein Skript auszuführen, das einen fehlerhaften #!
hat -Zeile, die auf einen Interpreter zeigt, der nicht gefunden werden kann. Es passiert genau derselbe Fehler sein, den Sie erhalten würden, wenn der von Ihnen eingegebene Befehl nicht gefunden werden kann, daher ist es leicht zu glauben, dass es sich um einen $PATH
handelt Problem (in diesem Fall nicht). Andere Shells haben informativere Fehlermeldungen (bash
und zsh
sagt "Bad Interpreter:No such file or directory" und teilt Ihnen auch mit, welchen Interpreter versucht wurde auszuführen).
Da es sich bei der Datei um eine DOS-Textdatei handelt, ist der #!
-line weist die Shell an, das Skript mit /bin/sh\r
auszuführen , wobei \r
ist eine übliche Darstellung eines Wagenrücklaufzeichens, das Teil des Zeilenabschlusses in DOS-Textdateien ist. Auf einem Unix-System ist ein Wagenrücklauf ein "gewöhnliches Zeichen" und überhaupt kein Teil des Zeilenabschlusses, was bedeutet, dass versucht wird, /bin/sh\r
zu starten um Ihr Skript auszuführen, und schlägt dann fehl, da diese Datei nicht existiert. Es ist also der Interpreter das ist "nicht gefunden", nicht das Skript selbst.
Ausführen des Skripts mit einem expliziten Interpreter umgeht den #!
-line, immer, weshalb Sie den Fehler nicht erhalten, wenn Sie das tun. Jede Zeile im Skript würde jedoch immer noch die Wagenrückläufe am Ende haben, was unter bestimmten Bedingungen zu Fehlfunktionen des Skripts führen kann.
Speichern Sie die Datei einfach erneut als Unix-Textdatei oder konvertieren Sie sie mit dos2unix
, würde Ihr Problem lösen.