【即解決】シェル実行時の「$’\r’: command not found」を対処

【即解決】シェル実行時の「$’\r’: command not found」を対処

 

★悩み★
・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が発生した経緯


「$’\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)が発生する原因は、以下となります。
 

★$’\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』を対処手順」に関して解説します。
 

$’\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が発生する原因」、「$’\r’: command not foundが発生した場合の調査と対処方法」を解説し、以下の悩みを解決しました。
 

★悩み★
・Linux上でシェルスクリプトを実行したけど異常終了する。
・「$’\r’: command not found」というエラーが表示されたけど原因は?
・シェル実行時の「$’\r’: command not found」を対処手順を知りたい。



「sedコマンド」や「dos2unixコマンド」を利用するだけで、「$’\r’: command not foundを簡単に解決」できます。ぜひあなたも本記事を参考に「シェルスクリプト実行時に発生する$’\r’: command not found」を解決してみてください。

タイトルとURLをコピーしました