R コマンドが Bash(または Cygwin) で見つからない問題を解決する

Olorunfemi Akinlua 2024年2月16日
  1. bash: '\r': command not found を Notepad++ で解決する
  2. dos2unixbash: '\r': command not found を解決する
  3. bash: '\r': command not foundsed で解決する
R コマンドが Bash(または Cygwin) で見つからない問題を解決する

bash: '\r': command not foundsyntax 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 (おそらく CygwinGit Bash、または WSL2 - Linux 用 Windows サブシステム を実行している) の場合、実行しようとしているスクリプトに CRLF 文字 (\r\n) が含まれている可能性があります。 Windows のデフォルトのメモ帳エディタで見たことがあるかもしれません。

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) に変更します。 .

notepadpluspluss

その後、新しく構成されたスクリプトで同じコマンドを実行すると、問題は発生しません。

以下を含む単純なスクリプト ファイルを使用して、同じ問題を再現してみましょう。

#!/bin/bash

echo "Testing the Carriage Return Character"
echo "Behavior"
echo "Wow! It works"

予想される出力 (エラーなし):

Testing the Carriage Return Character
Behavior
Wow! It works

デフォルトの Windows スタイルの末尾でスクリプト ファイルを保存しました。スクリプト ファイルを実行した結果は次のとおりです。

script.sh

echo ステートメントは引き続き出力されますが、'\r': command not found が表示されます。 同じファイルを Unix (LF) 形式で保存してみましょう。

スクリプト unix

これで、エラー メッセージは存在しなくなりました。

dos2unixbash: '\r': command not found を解決する

ターミナル (または Cygwin ターミナル) を使用しているときは、行末の変更を行うためにテキスト エディターに移動したくないでしょう。 ここで、dos2unixbash: '\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 コマンドを試してみましょう。

dos2unix

ご覧のとおり、コマンド出力で示されているように、コマンドは script.sh ファイルを Unix 形式に変更し、同じスクリプトを実行すると、エラー メッセージは表示されなくなります。

dos2unix: converting file script.sh to Unix format...

bash: '\r': command not foundsed で解決する

sedUnix ユーティリティ であり、Cygwin を含む Linux ターミナル経由で利用可能なテキストを解析および変換するのに役立ちます。 これにより、スクリプトが問題を引き起こすことなく、末尾の \r 文字を除外できます。

以下のコマンドは、\r 文字を削除し、いくつかの RegEx 式とユーティリティを使用して発生しているエラー メッセージを排除するのに役立ちます。

sed -i 's/\r$//' script.sh

あなたの場合、[script.sh] をファイル名に置き換えることができます。

CRLF スタイルのスクリプト script.shsed コマンドを試してみましょう。

sed

これで、$ '\r': command not found から解放されました。

これら 3つの代替方法を使用すると、作業時にスクリプト ファイルを Unix (LF) 形式で保存することで、問題を簡単に防ぐことができます。 ただし、それが防止できるものであり、たまたまアクセスできるファイルである場合は、dos2unix または sed コマンドを使用してエラーに対処できます。

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

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

関連記事 - Bash Cygwin

関連記事 - Bash Error