【比較検証】LinuxとWindowsではechoコマンド実行で改行タイミングが違う

【比較検証】LinuxとWindowsではechoコマンド実行で改行タイミングが違う Windowsサーバ

問題提起

echoコマンドで文字列をファイル出力する時の行数(位置)がLinuxとWindowsで異なります。

例えば、echoコマンドは

  • シェルスクリプト(Linux)、バッチファイル(Windows)などのプログラミング作成時
  • ターミナル(Linux)、CLIコンソール(Linux)、コマンドプロンプト(Windows)、PowerShell(Winodws)での利用時

など、OSが異なるさまざまなところで利用できます。

echoコマンド実行時の「改行」に関してOSによって異なる出力結果になることを把握することで、意図しない出力結果や予期せぬプログラムエラーを回避することができます。

OSによるechoコマンド実行時の「改行」の違いについて解説します

スポンサーリンク

OSの違いによるechoコマンドの改行について異なる箇所解説

【Linuxサーバ】
最終行から改行され次の行に文字列が入力されてファイル保存(出力)されます。
最終行は文字列が追加された行になります。
【Windowsサーバ】
最終行から改行されないでその続きから文字列が入力されてファイル保存(出力)されます。
・最終行は文字列が追加された次の行になります。

OSによるechoコマンド実行時の改行の違いを確認

LinuxとWindowsでechoコマンドを比較(空白行無し)

Linux

1.変更前の「test.txt」ファイルの状態を確認
※最終行が1行目

2.echoコマンドで文字列を「test.txt」へ追加書込み
※echoコマンドで文字出力

3.変更後の「test.txt」ファイルの改行タイミングをエディターで確認
※文字列の出力先は改行する
 (2行目に出力)
※最終行は文字を追加した行
 (2行目)

Windows

2.変更前の「test.txt」ファイルの状態を確認
※最終行が1行目

2.echoコマンドで文字列を「test.txt」へ追加書込み
※echoコマンドで文字出力

3.変更後の「test.txt」ファイルの改行タイミングをエディターで確認
※文字列の出力先は改行しない
 (1行目に出力)
※最終行は文字を追加した次の行
 (2行目)



LinuxとWindowsでechoコマンドを比較(空白行有り)

Linux

1.変更前の「test.txt」ファイルの状態を確認
※最終行が2行目

2.echoコマンドで文字列を「test.txt」へ追加書込み
※echoコマンドで文字出力

3.変更後の「test.txt」ファイルの改行タイミングをエディターで確認
※文字列の出力先は改行する
 (3行目に出力)
※最終行は文字を追加した行
 (3行目)

Windows

2.変更前の「test.txt」ファイルの状態を確認
※最終行が2行目

2.echoコマンドで文字列を「test.txt」へ追加書込み
※echoコマンドで文字出力

3.変更後の「test.txt」ファイルの改行タイミングをエディターで確認
※文字列の出力先は改行しない
 (2行目に出力)
※最終行は文字を追加した次の行
 (3行目)

echoコマンドによる改行に注意しないといけないケース

LinuxとWindowsのOSに存在する「hostsファイル」、「servicesファイル」にechoコマンドで文字列を追加するときに、最終行がどこにあるか?に注意して実行してください。

Linuxでechoコマンドを実行していた間隔のまま、Windowsでechoコマンドを実行すると、予想しない場所に文字列が出力されますので、OSの違いによる改行場所を把握して利用してください。

障害になりやすいWindows上でのechoコマンド実行ケース

servicesファイルにechoコマンドで文字列を追加書込みする場合での障害ケースを解説します。
※servicesファイルはtcp・udpの名前を登録するファイルで入力ルールが決まっています。

目的
servicesファイルに「test-srv 50000/tcp #test service」を正しく登録する

実行するechoコマンド

echo  "test-srv  50000/tcp  #test service"  >>  C:\Windows\System32\drivers\etc\services
servicesファイルを確認

最終行が「286行目」にあった状態で、上記の「echoコマンド」を実行した場合

echoコマンド実行結果

Windowsは最終行から改行されずに文字列を出力されます。
※echoコマンドでserviceファイルに正しく登録できていません。
(「287行目」以降に登録されている必要があります)

Windowsの場合
・最終行がどの行にあるか?を確認してからechoコマンドを実行する必要があります。
・今回のケースでは、最終行が「287行目」以降にあるかを確認してからechoコマンドを実行する必要があった。
想定していた文字列の出力結果

Windows上でechoコマンドを実行して文字列をservicesファイルへ正しく追記するには「287行目」以降に最終行がある状態にしておく必要があります。

Linuxの場合
・最終行が「286行目」にあっても改行されて文字列が出力されます。
・最終行が、「287行目」にあった状態でechoコマンドを実行しても「287行目」が空白行となり「288行目」に文字列が出力されます。
・最終行を気にせずに、servicesファイルのような入力ルールに対応できています。

コメント

タイトルとURLをコピーしました