VSCodeの改行コードを統一しよう

開発環境

最近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環境に移行しきるまでは表示しておいた方が安心な気がします。

コメント