R コマンドが Bash(または Cygwin) で見つからない問題を解決する
-
bash: '\r': command not found
を Notepad++ で解決する -
dos2unix
でbash: '\r': command not found
を解決する -
bash: '\r': command not found
をsed
で解決する
bash: '\r': command not found
やsyntax error near unexpected token $'\r'
などの同様のエラー メッセージの場合がそうであるように、すべてを正しく実行したように見えても、コマンドが予想とは異なる動作をすることがあります。
このようなエラー メッセージが表示された場合は、エラー メッセージを理解する必要があります。 この場合、カーソルを行の先頭に移動するよう端末に指示するキャリッジ リターン文字 \r
を処理する必要があります。
この記事は、エラー メッセージとその解決方法、またはエラーの再発防止方法を理解するのに役立ちます。
bash: '\r': command not found
を Notepad++ で解決する
OS が異なれば動作も異なりますが、通常は Windows が異なります。 前に述べたように、\r
文字の存在がこのエラーの原因です。
\r
は、OS ごとに異なる方法で管理される 改行と関係があります。
Unix や最新の Mac とは異なり、Windows は改行文字スタイルとして \n
(LF - ライン フィード) と \r
(CR - キャリッジ リターン) を使用する別の改行スタイルを使用し、古い Mac (OS X より前の macOS) )。
Unix、Linux、および最新の Mac では、端末がテキストを処理するときに重要な新しい行を開始するために \n
のみを使用します。
したがって、Windows PC (おそらく Cygwin、Git Bash、または WSL2 - Linux 用 Windows サブシステム を実行している) の場合、実行しようとしているスクリプトに CRLF 文字 (\r\n
) が含まれている可能性があります。 Windows のデフォルトのメモ帳エディタで見たことがあるかもしれません。
これと、Windows ベースのエディターでコマンドを実行しているスクリプトまたはファイルを作成した可能性があるため、Windows スタイル (または CRLF) の行末があり、CRLF 文字を削除する必要があります。
簡単な解決策としては、Notepad++ などのエディタを使用してファイル形式を Unix 文字形式 LF
に変更し、次のコマンドが表示されないようにすることです。
bash: '\r': command not found
syntax error near unexpected token `$'\r'
`fi
OS (Windows または Mac) で Notepad++ を使用して作業しているスクリプトを開き、Windows (CR LF)
/Macintosh (CR)
タブをダブルクリックしてファイル形式を変更し、Unix (LF) に変更します。
.
その後、新しく構成されたスクリプトで同じコマンドを実行すると、問題は発生しません。
以下を含む単純なスクリプト ファイルを使用して、同じ問題を再現してみましょう。
#!/bin/bash
echo "Testing the Carriage Return Character"
echo "Behavior"
echo "Wow! It works"
予想される出力 (エラーなし):
Testing the Carriage Return Character
Behavior
Wow! It works
デフォルトの Windows スタイルの末尾でスクリプト ファイルを保存しました。スクリプト ファイルを実行した結果は次のとおりです。
echo
ステートメントは引き続き出力されますが、'\r': command not found
が表示されます。 同じファイルを Unix (LF)
形式で保存してみましょう。
これで、エラー メッセージは存在しなくなりました。
dos2unix
で bash: '\r': command not found
を解決する
ターミナル (または Cygwin ターミナル) を使用しているときは、行末の変更を行うためにテキスト エディターに移動したくないでしょう。 ここで、dos2unix
がbash: '\r': コマンドが見つかりません
という問題を引き起こします。
dos2unix
を使用すると、DOS (Windows) または Mac 形式の改行ファイルを UNIX 形式の改行ファイル (プレーン テキストからスクリプト) に変換できます。
script.sh
で単純な dos2unix
コマンドを実行すると、エラー メッセージが解決されます。
dos2unix.exe script.sh
特に Windows の Cygwin ターミナルを使用していて、パッケージをインストールしていない場合は、コマンドが見つかりません
というメッセージが表示されることがあります。
Linux には一般的なディストリビューションのほとんどが付属していますが、お持ちでない場合は、以下のコマンドを使用するか、インストール ガイドに従ってください を使用できます。
sudo apt install tofrodos
macOS に dos2unix
をインストールするには、MacPorts をインストールしてから、以下のコマンドを使用するか、Brew によるインストール ガイド に従ってください。
sudo port install dos2unix
Cygwin にインストールするには、インストール ファイル をクリックして、既存のインストールを更新する必要があります。 その後、パッケージの選択
画面と検索バーが表示されます。
検索バーで dos2unix
を検索し、skip
値をダブルクリックします (バージョン番号が表示されます)。 その後、次へ
をクリックしてインストールを完了します。
それでは、スクリプトで dos2unix
コマンドを試してみましょう。
ご覧のとおり、コマンド出力で示されているように、コマンドは script.sh
ファイルを Unix 形式に変更し、同じスクリプトを実行すると、エラー メッセージは表示されなくなります。
dos2unix: converting file script.sh to Unix format...
bash: '\r': command not found
を sed
で解決する
sed
は Unix ユーティリティ であり、Cygwin を含む Linux ターミナル経由で利用可能なテキストを解析および変換するのに役立ちます。 これにより、スクリプトが問題を引き起こすことなく、末尾の \r
文字を除外できます。
以下のコマンドは、\r
文字を削除し、いくつかの RegEx 式とユーティリティを使用して発生しているエラー メッセージを排除するのに役立ちます。
sed -i 's/\r$//' script.sh
あなたの場合、[script.sh]
をファイル名に置き換えることができます。
CRLF スタイルのスクリプト script.sh
で sed
コマンドを試してみましょう。
これで、$ '\r': command not found
から解放されました。
これら 3つの代替方法を使用すると、作業時にスクリプト ファイルを Unix (LF)
形式で保存することで、問題を簡単に防ぐことができます。 ただし、それが防止できるものであり、たまたまアクセスできるファイルである場合は、dos2unix
または sed
コマンドを使用してエラーに対処できます。
Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.
LinkedIn