あなたの対話型シェルは 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 で変換するだけです。 、あなたの問題を解決します。