カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまにRuby on Railsなども。

/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません (No such file or directory)

Windows環境で保存したシェルスクリプトLinux環境で実行すると

/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません
/bin/bash^M: bad interpreter: No such file or directory

のエラー。
改行コードが\r\nで保存されてしまったため、Linuxの\nに直す必要がある。
対処法は以下。

sedコマンド一発で変換できる

$ sed -i 's/\r//' <対象のファイル>

以下、検証

cat -e で見ると、改行コードに\rが含まれていることが分かる。

$ cat -e hello.sh
#!/bin/bash^M$
echo "hello,world"^M$

このまま実行するとエラー

$ ./hello.sh
-bash: ./hello.sh: /bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません

sedで改行コードを変換

$ sed -i 's/\r//' hello.sh

catで見ると除去されている

$ cat -e hello.sh
#!/bin/bash$
echo "hello,world"$

実行できる

$ ./hello.sh
hello,world