/bin/bash^M: bad interpreter: No such file or directory
/bin/bash^Mはありません というエラーらしい。
which bashでパスを確認するもちゃんとパスは通っている。
というか最後の^Mはなんなの?
調べたら、どうやら改行コードの間違いらしい。
宣言文の
#!/bin/bash
でbashの場所を宣言しているが、この一行の末尾にWindowsの改行コードが入ってるから発生したみたい。
^Mは制御コードで、これを正規表現でマッチしたいときは\rを使う。
解決策としては以下のようにsedで一括置換してやります。
$ sed -i 's/\r//' <対象ファイル>
改行コードについてOS毎に違うって話はなんとなくしってたけど、
あまり知らなかったのでついでに調べた
OS | UNIX系 | Windows系 |
---|---|---|
記号 | LF | CR + LF |
正規表現 | \n | \r\n |
らしい。
今回のエラーではWindowsの改行コードである\r\nが入ってたから起きた事象。
だからいらない\rを消してやればOKだったわけです。
参考:
・/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません (No such file or directory) - カタカタブログ