「不正なインタープリター:そのようなファイルまたはディレクトリがありません」の解決方法
Macでsh
スクリプトを実行して、次のエラーを取得しようとしています。
/usr/bin/Perl^M: bad interpreter: No such file or directory
どうすれば修正できますか?
削除する ^M
で文字を制御する
Perl -i -pe 'y|\r||d' script.pl
/ usr/bin/Perl ^ M:
スクリプトの先頭にある^M
行からusr/bin/Perl
の最後にある#!
を削除します。それは偽のASCII 13文字で、シェルを狂わせています。
文字が表示されない場合は、おそらくバイナリエディターでファイルを検査する必要があります。
ファイルをMacの行末形式に変換するには、次のようにします。
$ vi your_script.sh
viタイプで1回:
:set ff=unix
:x
問題は、Linux/Unix/OSXマシンでDOS/Windowsテキスト形式を使用しようとしていることです。
DOS/Windowsテキストファイルでは、改行とも呼ばれる改行は、2つの文字の組み合わせです。キャリッジリターン(CR)の後に改行(LF)が続きます。 Unixテキストファイルでは、改行は単一の文字、ラインフィード(LF)です。
Dos2unixは、次の例のように、ファイルのエンコーディングを変換できます。
dos2unix yourfile yourfile
ヘルプについては、次を実行してください:man dos2unix
。
スクリプトに奇妙な行末があるようです:^M
は復帰\r
です。スクリプトをUnixの行末に変換します(Windowsシステムでは行末である\n
の代わりに\r\n
のみ)。
Sublime Textを希望する場合は、[表示]-> [行末]に移動して、Unixを確認します。
別のアプローチ:
Sudo ln -s /usr/bin/Perl /usr/local/bin/Perl`echo -e '\r'`