修正: Linux での「Bad Interpreter: No such File or Directory」エラー
公開: 2023-05-01dos2unix
コマンドを使用することです。dos2unix script1.sh
Bash スクリプトを実行しようとしたときに、「/bin/bash^M: bad interpreter: No such file or directory」というエラー メッセージが表示されましたか? 出力はあまり役に立たず、ほとんどスクリプトが欠落している印象を与えます。 幸いなことに、そうではなく、修正は非常に簡単です。
「Bad Interpreter: No such File or Directory」エラーとは何ですか?
「Bad Interpreter: No such File or Directory」エラーを修正する方法
dos2unix コマンドの使用
tr コマンドの使用
sed コマンドの使用
vi または vim の使用
Geany の使用
Kate または Kwrite の使用
メモ帳++の使用
VS コードの使用
「Bad Interpreter: No such File or Directory」エラーとは何ですか?
/bin/bash^M: bad interpreter: No such file or directory
エラー メッセージが表示される場合は、シェル スクリプト ファイルの行末が間違っていることを意味します。次の行。 DOS ベースの Windows では、 \r\n
と表記された「キャリッジ リターンとライン フィード」(CRLF) ターミネータが好まれます。 対照的に、Linux、最新の macOS、およびその他の Unix ベースのシステムでは、「改行」 (LF) または\n
のみが使用されます。
この不適切なインタープリター エラーが表示される場合は、スクリプトを最初に作成したのが Windows コンピューターである可能性があります。 Bash は、Windows コンピューターによって設定されたこれらの\r\n
行末を認識し、シェルがスクリプトを適切に解釈するのを妨げるため、動揺します。
file
コマンドでスクリプトを指定することにより、Linux ターミナルで問題を確認することもできます。
ファイル script1.sh
ファイルが DOS 行末を使用している場合、出力に「CRLF 行末記号付き」というメッセージが追加されます。 スクリプトが適切な Unix (LF) 改行を使用していた場合、ターミネータについてはまったく言及されません。 幸いなことに、LF ビジネスに戻るのは簡単です。
「Bad Interpreter: No such File or Directory」エラーを修正する方法
そのエラー メッセージを取り除き、スクリプトの実行を通常どおりに開始するには、DOS の行末から Unix の行末に切り替えるだけです。 これは、端末コマンドまたはお気に入りのコード エディターで行うことができます。 これを修正する8つの方法を次に示します。
dos2unix コマンドの使用
DOS (別名、Windows) ファイルを完全に Unix 互換のファイルに変換するためだけに作成された、適切な名前のdos2unix
というコマンドライン プログラムがあります。 ほとんどのデフォルト リポジトリで利用できるため、次の方法で Ubuntu にインストールできます。
須藤 apt インストール dos2unix
Fedora のインストールではdos2unix
プリインストールされていますが、次のコマンドで確認できます。
sudo dnf install dos2unix
Arch Linux の場合:
sudo pacman -S dos2unix
dos2unix
の使い方は簡単です。 ファイル名を付けるだけです。
dos2unix script1.sh
スクリプトを実行する前に変換が成功したことを確認したい場合は、 file
で確認してください。 スペースのみで区切られた複数のファイルに名前を付けることで、一括変換することもできます。
dos2unix script1.sh script2.sh script3.sh
または、ファイル名に一貫性がある場合は、もちろん、ワイルドカードを使用して短いコマンドを記述できます。
dos2unix スクリプト*.sh
dos2unix
コマンドには、ファイルの所有権の変更など、特別な種類の変換を行うのに役立ついくつかのフラグがあります。 CRLF に戻したい場合は、逆の形式でunix2dos
を使用することもできます。 詳細については、 dos2unix --help
と入力してください。
tr コマンドの使用
専用のユーティリティをインストールできない、またはインストールしたくない場合、Linux にはこれらの改行をクリーンアップするツールが組み込まれています。 tr
コマンドを使用すると、行末の\r
部分を取り除くことができるので、 \n
ターミネータが残ります。
tr -d '\r' < script1.sh > script1_unix.sh
ここで、 tr
はscript1.sh
ファイルのテキストを取得し、見つかった\r
のすべてのインスタンスを削除し、出力をファイルscript1_unix.sh
として保存します。
sed コマンドの使用
シェルに組み込まれている強力なsed
コマンドは、ファイルの行末を変更することもできます。
sed -i 's/\r//' script1.sh
sed
構文に慣れていない場合は、 sed
にファイルを編集 ( -i
) し、各改行 ( \r
) を何も置換 ( s/
) するように指示しています。 これにより、Unix で推奨される\n
行末記号が残ります。
vi または vim の使用
vi または vim を使用してスクリプトを編集する場合は、このコマンドを渡すだけで、現在開いているファイルを Unix の行末に変換できます。
:set fileformat=unix
関連: Vi または Vim エディターを終了する方法
Geany の使用
デスクトップ環境で作業している場合、ファイルを Unix の世界で使えるようにするためだけにターミナルをいじる理由はありません。 ほとんどすべてのコード エディターと IDE には、行末のトグルがあります。 これには Geany も含まれます。
Geany で行末を変換するには、[ドキュメント] > [行末を設定] > [変換して LF (Unix) に設定] に移動します。
スクリプトを保存して、もう一度実行してみてください。
Kate または Kwrite の使用
Kwrite を使用してスクリプトを編集する場合、または Kwrite のより強力な従兄弟である Kate を使用する場合は、[ツール] > [行末] > [Unix] をクリックして LF 形式に変換できます。
ファイルを保存して、スクリプトを再度実行します。
メモ帳++の使用
Notepad++ でコードを編集する場合、行末を簡単に変換することもできます。これは、Windows で実行する可能性が高いため (Linux 用の Notepad++ をインストールしていない場合)、Linux システムに移行する前に変換できるので便利です。 ファイルを開いた状態で、[編集] > [EOL 変換] > [Unix (LF)] に移動します。
スクリプトを実行する前に必ず保存してください。
Notepad++ でデフォルトで Unix 行末を持つファイルを作成する場合は、[設定] > [環境設定] に移動し、[新しいドキュメント] タブを選択し、[形式 (行末)] オプションで [Unix (LF)] ラジオ ボタンをクリックします。
VS コードの使用
Visual Studio Code (VS Code) はほとんど同じように機能しますが、トグルだけがさらに見つけやすくなっています。 VS Code のウィンドウの右下隅にある [CRLF] をクリックするだけです。
[ファイル] > [設定] > [設定] に移動し、設定検索バーにeol
と入力して、デフォルトで Unix 行末を使用するように VS Code を設定することもできます。 一番上の結果は、「Eol」を設定するためのドロップダウン メニューです。 「\n」に変更してください。
関連: Bash スクリプトをハードウェア対応にする方法