あなたの対話型シェルは dash
です (sh
になりすます )。 dash
シェルは言う
sh: /usr/local/bin/wait-for: not found
障害のある #!
を持つスクリプトを実行しようとしたとき -見つからないインタープリターを指している行。 起こる 入力したコマンドが見つからない場合に発生するエラーとまったく同じであるため、$PATH
であると考えるのは簡単です。 問題(この場合ではありません)。その他のシェルには、より有益なエラー メッセージがあります (bash
そして zsh
「悪いインタープリター:そのようなファイルまたはディレクトリはありません」と表示され、実行しようとしたインタープリターも示されます)。
ファイルは DOS テキスト ファイルなので、#!
-line はシェルに /bin/sh\r
でスクリプトを実行するように指示します 、ここで \r
は、DOS テキスト ファイルの行末の一部であるキャリッジ リターン文字の一般的な表現です。 Unix システムでは、キャリッジ リターンは「通常の文字」であり、行末の一部ではありません。つまり、/bin/sh\r
を開始しようとします。 スクリプトを実行し、そのファイルが存在しないため失敗します。したがって、インタプリタです。 それは「見つかりません」であり、スクリプト自体ではありません。
explicit でスクリプトを実行する インタプリタは #!
をバイパスします -line、常に、それを行ったときにエラーが発生しないのはそのためです。ただし、スクリプトの各行の最後に改行が残っているため、状況によってはスクリプトが誤動作する可能性があります。
ファイルを Unix テキスト ファイルとして再保存するか、dos2unix
で変換するだけです。 、あなたの問題を解決します。