エディターでは分かりにくい、.shなのに実行できないスクリプトファイルの確認方法
目的
他者/他社からzipやtar.gzで.shファイルを受領、
linux環境で実行してみると以下のエラーメッセージが表示される。
/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません (No such file or directory)
- 特に送り主がWindowsをメインとしている環境からの場合が要注意
結論
改行コードをCRLFからLFに置換して実行できるかを確認する。
より正確に言うならCRを除去する
sed -i 's/\r//' *.sh
経緯
エディターで表示させてもUTF-8の.shファイル、しかしlinux上で実行すると、
/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません (No such file or directory)
まずcatで改行コードを確認してみる
^M
がCR、$
がLFを表す
$ cat -e *.sh
#!/usr/bin/env bash$
first_command^M$
second_command^M$
sedで置換してしまいます。
sed -i 's/\r//' *.sh
置換後
$ cat -e *.sh
#!/usr/bin/env bash$
first_command$
second_command$
注意
OSやカーネルのバージョンによってはCRLFであっても実行できる場合があります。
参考url
/bin/bash^M: bad interpreter: そのようなファイルやディレクトリはありません (No such file or directory)
Author And Source
この問題について(エディターでは分かりにくい、.shなのに実行できないスクリプトファイルの確認方法), 我々は、より多くの情報をここで見つけました https://qiita.com/ayasumi_primary/items/0225d5c89ff1f2e7e217著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .