修正: Linux での「Bad Interpreter: No such File or Directory」エラー

公開: 2023-05-01
Cherry KW 9200 ミニ キーボードで入力する人
ハンナ・ストライカー / ハウツーオタク
シェル スクリプトの実行時に「bad interpreter: no such file or directory」エラーが発生した場合は、スクリプト ファイルを Windows から Unix の行末に変換する必要があります。 1 つの方法は、次のようにdos2unixコマンドを使用することです。

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行末を認識し、シェルがスクリプトを適切に解釈するのを妨げるため、動揺します。

Linux コマンド ラインに「bad interpreter: no such file or directory」というエラー メッセージが表示される。

fileコマンドでスクリプトを指定することにより、Linux ターミナルで問題を確認することもできます。

 ファイル script1.sh 

Linux の file コマンドでファイルの行末を確認します。

ファイルが 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 

dos2unix コマンドを入力します。

スクリプトを実行する前に変換が成功したことを確認したい場合は、 fileで確認してください。 スペースのみで区切られた複数のファイルに名前を付けることで、一括変換することもできます。

 dos2unix script1.sh script2.sh script3.sh

または、ファイル名に一貫性がある場合は、もちろん、ワイルドカードを使用して短いコマンドを記述できます。

 dos2unix スクリプト*.sh 

dos2unix コマンドでアスタリスクを使用して、ワイルドカードで変換します。

dos2unixコマンドには、ファイルの所有権の変更など、特別な種類の変換を行うのに役立ついくつかのフラグがあります。 CRLF に戻したい場合は、逆の形式でunix2dosを使用することもできます。 詳細については、 dos2unix --helpと入力してください。

tr コマンドの使用

専用のユーティリティをインストールできない、またはインストールしたくない場合、Linux にはこれらの改行をクリーンアップするツールが組み込まれています。 trコマンドを使用すると、行末の\r部分を取り除くことができるので、 \nターミネータが残ります。

 tr -d '\r' < script1.sh > script1_unix.sh

ここで、 trscript1.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 

vim コマンドでスクリプト ファイルの形式を変更します。

関連: Vi または Vim エディターを終了する方法

Geany の使用

デスクトップ環境で作業している場合、ファイルを Unix の世界で使えるようにするためだけにターミナルをいじる理由はありません。 ほとんどすべてのコード エディターと IDE には、行末のトグルがあります。 これには Geany も含まれます。

Geany で行末を変換するには、[ドキュメント] > [行末を設定] > [変換して LF (Unix) に設定] に移動します。

Geany の [ドキュメント] メニューで、[行末の設定] に移動し、[変換して LF (Unix) に設定] を選択します。

スクリプトを保存して、もう一度実行してみてください。

Kate または Kwrite の使用

Kwrite を使用してスクリプトを編集する場合、または Kwrite のより強力な従兄弟である Kate を使用する場合は、[ツール] > [行末] > [Unix] をクリックして LF 形式に変換できます。

Kwrite の [ツール] メニューで [行末] を開き、[Unix] を選択します。

ファイルを保存して、スクリプトを再度実行します。

メモ帳++の使用

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」に変更してください。

VS Code 設定で、デフォルトの EOL 設定を「\n」に変更します。

関連: Bash スクリプトをハードウェア対応にする方法