0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

/bin/bash^M: 誤ったインタプリタです

Posted at

はじめに

こんにちは。
仮想環境ぶっ壊しマンの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の道はこのエラーから始まったと言っても過言ではありません。
拙い文章でしたがここまで読んでいただきありがとうございました。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?