Linux での No such File or Directory」エラー

ハンナ・ストライカー / ハウツーオタク
シェル スクリプトの実行時に「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」というエラー メッセージが表示されましたか? 出力はあまり役に立たず、ほとんどスクリプトが欠落している印象を与えます。 幸いなことに、そうではなく、修正は非常に簡単です。

Advertisement

「Bad Interpreter: No such File or Directory」エラーとは何ですか?

次のようなエラー メッセージが表示される /bin/bash^M: bad interpreter: No such file or directory シェルスクリプトファイルが間違っていることを意味します 行末— 次の行に移動する時間を示す、行末に配置される文字。 DOS 系の Windows では、「キャリッジ リターンとライン フィード」(CRLF) ターミネータが好まれます。 rn. 対照的に、Linux、最新の macOS、およびその他の Unix ベースのシステムでは、「ライン フィード」(LF) のみを使用します。 n.

この不適切なインタープリター エラーが表示される場合は、スクリプトを最初に作成したのが Windows コンピューターである可能性があります。 バッシュはそれらを見ます rn Windows コンピューターによって設定された行末は、シェルがスクリプトを適切に解釈するのを妨げるため、動揺します。

あ "不適切なインタープリター: そのようなファイルまたはディレクトリはありません" Linux コマンド ラインのエラー メッセージ。

Linux ターミナルで問題を確認することもできます。 file コマンドをスクリプトに追加します。

Advertisement

file 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 にインストールできます。

sudo apt install 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

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

Advertisement

dos2unix script*.sh

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

dos2unix コマンドには、ファイルの所有権の変更など、特別な種類の変換を行うのに役立ついくつかのフラグがあります。 逆の形でも使えますが、 unix2dos、CRLFに戻したい場合。 入力 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) と置換 (s/) 各改行 (r)何もありません。 それは私たちにUnixの好みを残します n ラインターミネーター。

vi または vim の使用

vi または vim を使用してスクリプトを編集する場合は、このコマンドを渡すだけで、現在開いているファイルを Unix の行末に変換できます。

:set fileformat=unix

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

Advertisement

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

Geany の使用

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

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

Geany の[ドキュメント]メニューで、 "行末を設定する" そして選ぶ "変換して LF に設定 (Unix)".

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

Kate または Kwrite の使用

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

Kwrite の[ツール]メニューで、 "行末" そして選択 "ユニックス。"

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

Advertisement

メモ帳++の使用

Notepad++ でコードを編集する場合、行末を簡単に変換することもできます。これは、Windows で実行する可能性が高いため便利です ( Linux 用の Notepad++ がインストールされている場合)、Linux システムに移行する前にそれらを変換できます。 ファイルを開いた状態で、[編集]>[EOL 変換]>[Unix (LF)]に移動します。

スクリプトを実行する前に必ず保存してください。

Notepad++ でデフォルトで Unix 行末を含むファイルを作成する場合は、[設定]>[環境設定]に移動し、[新しいドキュメント]タブを選択し、[形式 (行末)]オプションで[Unix (LF)]ラジオ ボタンをクリックします。

VS コードの使用

Visual Studio Code (VS Code) はほとんど同じように機能しますが、トグルだけがさらに見つけやすくなっています。 VS Code のウィンドウの右下隅にある[CRLF]をクリックするだけです。

[ファイル]>[設定]>[設定]に移動し、次のように入力して、デフォルトで Unix の行末を使用するように VS Code を設定することもできます。 eol 設定検索バーで。 一番上の結果は、「Eol」を設定するためのドロップダウン メニューです。 「n」に変更してください。

Advertisement

VS Code 設定で、デフォルトの EOL 設定を "n".

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

Advertisement