web-dev-qa-db-ja.com

「不正なインタープリター:そのようなファイルまたはディレクトリがありません」の解決方法

Macでshスクリプトを実行して、次のエラーを取得しようとしています。

/usr/bin/Perl^M: bad interpreter: No such file or directory

どうすれば修正できますか?

35
Elad Benda

削除する ^Mで文字を制御する

Perl -i -pe 'y|\r||d' script.pl
69
Сухой27

/ usr/bin/Perl ^ M:

スクリプトの先頭にある^M行からusr/bin/Perlの最後にある#!を削除します。それは偽のASCII 13文字で、シェルを狂わせています。

文字が表示されない場合は、おそらくバイナリエディターでファイルを検査する必要があります。

ファイルをMacの行末形式に変換するには、次のようにします。

$ vi your_script.sh

viタイプで1回:

 :set ff=unix

 :x
45
sergio

問題は、Linux/Unix/OSXマシンでDOS/Windowsテキスト形式を使用しようとしていることです。

DOS/Windowsテキストファイルでは、改行とも呼ばれる改行は、2つの文字の組み合わせです。キャリッジリターン(CR)の後に改行(LF)が続きます。 Unixテキストファイルでは、改行は単一の文字、ラインフィード(LF)です。

Dos2unixは、次の例のように、ファイルのエンコーディングを変換できます。

dos2unix yourfile yourfile

ヘルプについては、次を実行してください:man dos2unix

6
kenorb

スクリプトに奇妙な行末があるようです:^Mは復帰\rです。スクリプトをUnixの行末に変換します(Windowsシステムでは行末である\nの代わりに\r\nのみ)。

5
amon

Sublime Textを希望する場合は、[表示]-> [行末]に移動して、Unixを確認します。

2
vahotm

別のアプローチ:

Sudo ln -s /usr/bin/Perl /usr/local/bin/Perl`echo -e '\r'`
2
ysth