$'\r': command not found が出たときの修正方法
こんにちは! haru です!
今回の記事では、./entrypoint.sh: line 2: $'\r': command not found が出たときの修正方法を書いています!
1. エラー内容
実行環境:MAC
./entrypoint.sh: line 2: $'\r': command not found
docker-compose up --build にて、エラー発生
entrypoint.sh
#!/bin/sh
if [ "$DATABASE" = "postgres" ]
then
echo "Waiting for postgres..."
while ! nc -z $DATABASE_HOST $DATABASE_PORT; do
sleep 0.1
done
echo "PostgreSQL started"
fi
exec "$@"
2. 解決方法
改行コードが原因でエラーが発生しています。
プロジェクトのルートディレクトリに
.editorconfig
を作成します。 EditorConfig について詳しく知りたい方は
この記事がわかりやすかったので是非見てみてください。
.editorconfig に以下コードを記述
[*.sh]
end_of_line = lf
このように書くと解決します。 * で拡張子が .sh のファイル全てを対象(開発環境と本番環境でファイルを分けている場合に役立ちます)
二行目の end_of_line とは改行コードの指定をしています。
Linux などの UNIX系では「LF」
windows系では「CR + LF」
が改行コードとして使用されています。環境ごとに適した改行コードを選択しないとエラーが起きるということですね。
MACの方は
end_of_line = lf
windows の方は
end_of_line = crlf
と記述すれば解決します。
改行コードについてさらに知りたい方は
https://wa3.i-3-i.info/diff129crlf.html
こちらの記事がわかりやすく紹介しているので是非ご覧ください!
3. 自分がエラーにかかった経緯
言語ごとのインデント(Pythonだったら4, JavaScriptだったら2)とわけてコーディングしたい。と思っていて
こんなことを呟いたら EditorConfig使えるよ!
と教えてくださった方がいたので、いろいろ調べてみると
root = true
[*]
indent_style = space
indent_size = 4
end_of_line = crlf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
こうやって書けば解決!みたいなことが書いてあったので全て真似したらこのようなエラーになりましたね・・・
そもそもMACだから改行コードも lf じゃなきゃいけないのに・・・😅
もう少し、ちゃんと調べるべきだと反省しています😓