はじめに
こんにちは。
仮想環境ぶっ壊しマンのBaNanaです!
このネタはしばらく擦っていきます!!
今回は、変なエラーが出てスクリプトが実行できない問題を解決して行きたいと思います。
問題と解決
環境
Windows 10 Pro 22H2
Oracle VM VirtualBox 7.0
ubuntu 20.04.6
問題
スクリプトを実行しようとすると、以下のエラーが発生し、実行できない。
/bin/bash^M: 誤ったインタプリタです: そのようなファイルやディレクトリはありません
英語だと以下のように表示される
/bin/bash^M: bad interpreter' No such file or directory
解決方法
ubuntu上で新しいshファイルを作成してそこにコピペ
ubuntuのテキストエディタで新しいファイルを作成し、そこに貼り付けて名前をつけて保存
Windows上でサクラエディタなどの正規表現を用いることができるエディタで改行コードを変換
Windows上で該当ファイルをサクラエディタなどで開き、改行コードを置換。サクラエディタの場合はCtrl+r
を押し、\r\n
を\n
に置き換える
ubuntu上で改行コードを置換するコマンドを実行
sed -i 's/\r//' 置換したいファイルパス
を実行
結果
以上の解決方法のどれかでスクリプトファイルを編集してから、もう一度スクリプトを実行すると成功する
原因
ubuntuなどのLinux系OSで用いられている改行コードはLF(Line Feed)
、Windows上で用いられている改行コードはCRLF(Carriage Return Line Feed)
である。
今回のエラーは2つのOS間で用いられている改行コードが違うことが原因である。
エラーが起きていたスクリプトファイル(解決方法実行前のもの)で
cat -e ファイルパス
を実行すると、行末に^M$
と表示されていることを確認できる。^M
はCRを表しており、$
はLFを表している。
ubuntu上でエラーを出さずにスクリプトを実行させる場合は改行コードを全て $(LF)
に合わせなければならない。
そのため上記解決方法を実行する必要がある。
解決方法を実行し、それが成功した場合は該当の.shファイルの行末が全て $
になる。
おわりに
改行コードについては色々と奥が深いようです。
詳しくは参考文献のリンクをご覧ください。
私のubuntuの道はこのエラーから始まったと言っても過言ではありません。
拙い文章でしたがここまで読んでいただきありがとうございました。
参考文献