最近Dockerを使い始めました。
今までWindows環境でぬくぬくと生きてきたわけですが、wslだのなんだのとlinux環境へ移住することとなりました。そうしたら、さっそくDevContainer作ってる最中に改行コードでハマったので、二度と同じ過ちを繰り返さないための対応策を記録しておきます。
具体的に何にハマったかというと、シェルスクリプトをwindowsで作った際に改行コードがCRLFだったため、
$'\r': command not found
というエラーに当たってしまいました。
windowsの改行コード(\r\n)がlinuxの改行コード(\n)と違うために発生します。
\rは改行コードとして見做されないので、コマンドとして実行しようとして失敗する、と。
該当ファイルをcatコマンドで見てみましょう。
postCreateCommand.sh は DevContainer.jsonで呼び出しています。
cat -e postCreateCommand.sh
\r\nの場合、「^M$」で改行コードが表示されます。
#!/bin/bash^M$
^M$
npm install^M$
\nの場合、「$」で改行コードが表示されます。
#!/bin/bash$
$
npm install$
たったこれだけなんですが、間違いなく何度もやると思うので対策しておきます。
手っ取り早く改行コードを置き換えるには dos2unix コマンドを使いましょう。
apt-get install dos2unix
dos2unix postCreateCommand.sh
インストールしてなければdot2unixをインストールし、コマンド打つだけ。
VSCodeの設定変更(EOL)
そして、再発防止のためにエディタの方も設定を変更します。
PreferenceからEOLで検索します。
デフォルト設定がautoになっているので\nへ変更します。
windowsは\nも改行コードとして正しく認識するので\nで統一してよいです。
拡張機能 code-eol
蒸気を設定していれば入れる必要はありませんが、見た目で改行コードを判断したいのでついでに入れておきます。
LFで入力できていれば、以下のような↓で改行コードが表示されます。
若干鬱陶しい気もしますが、linux環境に移行しきるまでは表示しておいた方が安心な気がします。
コメント