Windowsで作成したシェルスクリプトで実行すると、「command not found」エラー

シェルスクリプトを実行すると「$’\r’: command not found」のエラー

シェルスクリプトを作るときはAtom等のエディタで作ってSCPでアップしていました。macOSからWindowsに変更しても同じような感覚で作成すると「$’\r’: command not foundエラーになりました

$ sh test.sh 
test.sh: line 2: $'\r': command not found

これは、改行コードがWindowsの改行コードになっていることが原因です。前はmacOSだったので改行コードがUnixの改行コードになっていたので意識しなくてもよかったのですが、WindowsだとWindowsの改行コードになります

ファイルの改行コードを確認

Windowsで改行コードを作成すると行末に「^M$」となりWindowsでの改行コードになります。UTF8だと改行コードは「$」となります

# 改行コードがWindowsのファイル
$ cat -e test.sh 
#!/bin/bash^M$
^M$
echo "test"^M$

# 改行コードをUTF8のファイル
$ cat -e test_utf8.sh 
#!/bin/bash$
$
echo "ls -lh"$

改行コードをUnix形式に変換する

改行コードが原因なのでテキスエディタで改行コードをWindowsからUTF8に変換して再アップロードすればOKですが、Linux側で改行コードをsedコマンドで変換しても大丈夫です

$ sed "s/^M//g" <変換前のファイル> > <変換後のファイル>

 

スポンサーリンク