bad interpreter!

ある日Shell Scriptを書いて実行しようとしたとき、いきなりエラーに遭遇しました。
それは、シェルの構文が間違っていたとか、存在しない変数名を使ったとか、そういうわかりやすい間違いではありませんでした。

作成したスクリプトを、hogehoge.sh というファイル名で保存し、実行してみたのですが
-bash: ./hogehoge.sh: /bin/bash^M: bad interpreter: No such file or directory
と表示されしまい、エラーとなってしまいました。
さて、一体このファイルの内容のどこに問題があったのでしょうか。

それは、ファイルの先頭行に書かれている
#!/bin/bash
の部分に原因がありました。
この1行は、このファイルの内容が、/bin/bashのスクリプトであることを明示するための宣言文です。
ここにエラーが出るとは、夢にも思っていませんでしたので、物凄く混乱した記憶があります。

右往左往した後に、エラーメッセージをよく読んでみると、
/bin/bash^M
なにか変なことに気がつきました。
記号「^M」の存在です。

この記号が、すべてを物語っていました。
UNIXの改行コードは\n。
Windowsの改行は\r\n。
そうです、この^Mというのは、Windowsの改行コードに含まれる\rだったのです。
そういえば、このファイルは、Linuxマシンに転送する前に、Windows上のテキストエディタで書いていました!

つまり、
/bin/bash という名前でシェルのプログラムを指定しなければいけないところだったのですが、/bin/bash^M という名前を指定していました。
指定されたフォルダには、bashという名前の実行ファイルはありますが、bash^Mというファイルは存在しません。
だから No such file or directory というエラーが発生していたんですね。

解ってしまえばどうということはないのですが、最初に遭遇した謎のエラーでした。


0 件のコメント: