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 ターミナルで問題を確認することもできます。 file
コマンドをスクリプトに追加します。
Advertisement
file script1.sh
ファイルが 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
で確認してください file
スクリプトを実行する前に、変換が成功したことを確認したい場合。 スペースのみで区切られた複数のファイルに名前を付けることで、一括変換することもできます。
dos2unix script1.sh script2.sh script3.sh
または、ファイル名に一貫性がある場合は、もちろん、ワイルドカードを使用して短いコマンドを記述できます。
Advertisement
dos2unix script*.sh
の 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
Advertisement
関連している: Vi または Vim エディタを終了する方法
Geany の使用
デスクトップ環境で作業している場合、ファイルを Unix の世界で使えるようにするためだけにターミナルをいじる理由はありません。 ほぼすべてのコード エディターと そこにあるIDEには、行末のトグルがあります。 それには ゲニー.
Geany で行末を変換するには、[ドキュメント]>[行末を設定]>[変換して LF (Unix) に設定]に移動します。
スクリプトを保存して、もう一度実行してみてください。
Kate または Kwrite の使用
使用する場合 クライト スクリプトを編集するには、または Kwrite のより強力ないとこ ケイトの場合、[ツール]>[行末]>[Unix]をクリックして LF 形式に変換できます。
ファイルを保存して、スクリプトを再度実行します。
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
関連している: Bash スクリプトをハードウェア対応にする方法