
★悩み★
・Linux上でシェルスクリプトを実行したけど異常終了する。
・「$’\r’: command not found」というエラーが表示されたけど原因は?
・シェル実行時の「$’\r’: command not found」を対処手順を知りたい。
こういった「悩み」に答えます。
★本記事の内容★
① $’\r’: command not foundが発生した経緯を解説
② $’\r’: command not foundが発生する原因を解説
③ シェル実行時の「$’\r’: command not found」を対処手順を解説
これからご紹介する「【即解決】シェル実行時の『$’\r’: command not found』を対処」を実践したことで、筆者は5分以内で「$’\r’: command not foundを解決」できました。
記事の前半では「$’\r’: command not foundが発生した経緯と原因」を解説します。記事の後半では「$’\r’: command not foundを解決する手順」を紹介します。
この記事を読み終えることで、「$’\r’: command not foundを解決し、正常にシェルスクリプトを実行できる」状態になります。
$’\r’: command not foundが発生した経緯

「$’\r’: command not foundが発生した経緯」に関して解説します。
本事象が発生した当時は、納期が近く、そうとう慌てふためいた記憶があります。
筆者は、以下のようなシェルスクリプトをLinux上で実行しようと考えていました。
# cat test.sh
#!/bin/bash
echo "test"
上記シェルスクリプトを実行するために、以下のコマンドを実行したところ、「$’\r’: command not found」が発生しました。
# sh test.sh
test.sh: line 2: $'\r': command not found
本事象は、以下の日時と環境で発生しました。
動作確認済み日時:2021年12月10日
動作確認済み環境:CentOS Linux release 7.7.1908 (Core)
以上が、「$’\r’: command not foundが発生した経緯」となります。
$’\r’: command not foundが発生する原因

「$’\r’: command not foundが発生する原因」に関して解説します。
$’\r’: command not foundが発生する原因としては、「改行コード」となります。
本事象($’\r’: command not found)が発生する原因は、以下となります。
★$’\r’: command not foundが発生する原因★
実行したシェルスクリプト内の改行コードが「Linuxの改行コード(\r)」ではなく、「Windowsの改行コード(\r\n)」になっていました。
ちなみに、「catコマンド」で、ファイルの改行コードを簡単に調べられます。
# 改行コードがLinuxの改行コード(\r)である場合
# cat -e test.sh
#!/bin/bash$
echo "test"$
# 改行コードがWindowsの改行コード(\r\n)である場合
# cat -e test.sh
#!/bin/bash^M$
echo "test"^M$
以上が、「$’\r’: command not foundが発生する原因」となります。
シェル実行時の「$’\r’: command not found」を対処手順

「シェル実行時の『$’\r’: command not found』を対処手順」に関して解説します。
$’\r’: command not foundを解消するための方法をいくつかご紹介しますね。
以下の「sedコマンド」を実行することで、「$’\r’: command not found」を解消することができます。
# sed -ie "s/^M//g" <Windowsの改行コード(\r\n)を含むファイル>
「sedコマンド」内の「^M」は、「^」と「M」を入力ではなく、「CTRL+vの同時押し」と「CTRL+mの同時押し」を連続して入力してください。
また、以下の「dos2unixコマンド」を実行することでも、「$’\r’: command not found」を解消することができます。
# dos2unix <Windowsの改行コード(\r\n)を含むファイル>
dos2unix: converting file test_win.sh to Unix format ...
dos2unixコマンドは、以下の方法でインストールできます。
Debian系(Ubuntuなど): apt install dos2unix
Fedora系(CentOS/RHELなど): yum install dos2unix
以上が、「シェル実行時の「$’\r’: command not found」を対処手順」となります。
シェルスクリプトは、改行コードが異なるだけで、異常終了します。
$’\r’: command not foundが発生した場合は、改行コードを疑いましょう。
【まとめ】シェル実行時の「$’\r’: command not found」を対処【即解決】

いかがでしたでしょうか?「$’\r’: command not foundが発生する原因」、「$’\r’: command not foundが発生した場合の調査と対処方法」を解説し、以下の悩みを解決しました。
★悩み★
・Linux上でシェルスクリプトを実行したけど異常終了する。
・「$’\r’: command not found」というエラーが表示されたけど原因は?
・シェル実行時の「$’\r’: command not found」を対処手順を知りたい。
「sedコマンド」や「dos2unixコマンド」を利用するだけで、「$’\r’: command not foundを簡単に解決」できます。ぜひあなたも本記事を参考に「シェルスクリプト実行時に発生する$’\r’: command not found」を解決してみてください。