LoginSignup
1
1

More than 1 year has passed since last update.

Windowsでシェルスクリプトを書くときの改行コード

Last updated at Posted at 2022-05-02

Windowsユーザなので、WSLやAmazon Linux上でシェルスクリプトを動かすときに百万回やっています。

1.改行コードとは

テキストファイルの各行の最後に存在する、コンピュータに改行することを伝える見えない記号のこと。エディタの設定で可視化することもできる。

Windows、Linux、Macで改行コードが違っているため、Windows上のエディタで書いたスクリプトをWSLなどで動かすと改行コードが理解できずエラーになってしまうことがある。

2.事象の再現

Windows 10 のメモ帳を開き、以下シェルスクリプトを作成する。

windows_newline_code_test.sh
#!/bin/bash/

echo "Windows - newline code test"

image.png

WSLで実行すると、以下エラーになる。

$ bash windows_newline_code_test.bash
windows_newline_code_test.bash: line 2: $'\r': command not found
Windows - newline code test

これは Windows の改行コードCRLFが使われているために発生するエラー。

3.改行コードについて

OS やバージョンによって改行コードが違う。

OS 名称 コード
Mac(OS 9 以前) CR(Carriage Return) \r
unix LF(Line Feed) \n
Windows CR+LF(Carriage Return + Line Feed) \r\n

3-1.改行コードの確認

使用されている改行コードを調べるには file コマンドを使用する。

file <textfile>

3-1-1.改行コードが LF の場合

$ file lf.txt
lf.txt: UTF-8 Unicode text

image.png

3-1-2.改行コードが CR+LF の場合

$ file crlf.txt
crlf.txt: UTF-8 Unicode text, with CRLF line terminators

image.png

4.改行コードの変換

4-1.nkf コマンドで変換

nkfコマンドで改行コードの変換ができる。私はWSLで利用している Ubuntu にnkfコマンドが未インストールだったので、以下コマンドでインストールした。

sudo apt install nkf

nkf コマンドの詳細は以下を参照。

改行コードを LF に変換するには nkf コマンドの -Lu (もしくは -d ) オプションを使用する。


# 「crlf.txt」の改行コードが CR+LF になっていることを確認する
$ file crlf.txt
crlf.txt: UTF-8 Unicode text, with CRLF line terminators

# 改行コードを LF に変換し、temp.txt に保存
$ nkf -Lu crlf.txt  > temp.txt

# 「temp.txt」の改行コードが LF になっていることを確認する
$ file temp.txt
temp.txt: UTF-8 Unicode text

image.png

4-2.sed で改行コードを置換する

sedで置換することもできる。

# 「crlf.txt」の改行コードが CR+LF になっていることを確認する
$ file crlf.txt
crlf.txt: UTF-8 Unicode text, with CRLF line terminators

# 改行コードを LF に変換する
$ sed -i -e 's/\r//g' crlf.txt

# 「crlf.txt」の改行コードが LF になっていることを確認する
$ file crlf.txt
crlf.txt: UTF-8 Unicode text

image.png

4-2.Visual Studio Code でデフォルト改行コードを変更する

Visual Studio Code(以下、VScode)を開き、[File] - [Preference]- [Settings]で設定画面に遷移する。
image.png
日本語なら[ファイル]-[ユーザ設定]-[設定]で設定画面に遷移できる。

検索バーで「eol」と検索すると、改行の設定「Eol項目」を見つけることができる。
image.png

デフォルトで「auto」になっている。今回はシェルスクリプトを作成したいので、\n(LF)を選択する。
image.png

VScodeには設定の保存や反映させるボタンなどはなく、これで設定変更が反映されている。
image.png

新規ファイル作成すると、右下の改行コード表示が「LF」になっているのが確認できる。
image.png

右下の改行コード表示をクリックして、保存時の改行コードを選択することもできる。
image.png

4-2-1.改行コード変更済Visual Studio Code でシェルスクリプトを作成する

デフォルトの改行コードを変更したVScodeで、以下のようなシェルスクリプトを作成する。

vscode_newline_code_test.sh
#!/bin/bash/

echo "vscode_newline_code_test"

image.png

実行すると、エラーなく実行されるのが確認できる。

$ bash vscode_newline_code_test.sh
vscode_newline_code_test

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1