Linuxでbashスクリプトを作っていると、非対話でファイルに内容を追記したい場合があります。
echoコマンドと">>"リダイレクトを使うことで、ファイルの末尾に1行内容を追記できるのですが、複数行追記したい場合はechoコマンドが連続し読みづらくなります。
このような場合は、bashのヒアドキュメント機能とcatコマンドを組み合わせて使うことで、echoコマンドを重ねなくても複数行のファイルを作成することができます。
作成方法
下記のように記述することで/path/to/file.txtに3行追記させることができます。
cat <<EOL >> /path/to/file.txt
line 1
line 2
line 3
EOL
ここで、1行目の<<EOL
と最後の'EOL'がbashのヒアドキュメント機能です。EOLの部分は、最初と最後がペアにさえなっていれば好きな文字列に変更可能です。(ですが、EOFや、EOT、ENDを指定することが多いです。)
cat <<SETTING >> /path/to/file.txt
line 1
line 2
line 3
SETTING
ヒアドキュメントでは、bash変数も展開させることが可能です。
cat <<EOL >> setting.conf
user=${USERNAME}
pass=${PASSWORD}
EOL
逆に、あえてbash変数を展開させて宅ない場合は、最初の<<EOLの識別子をシングルクォートで区切ればよいです。
cat <<'EOL' >> setting.conf
user=${USERNAME}
pass=${PASSWORD}
EOL
ヒアドキュメントを使わない方法
ヒアドキュメントを使いたくない場合は、以下のように全体をクォートする方法もあります。
cat 'line 1
line 2
line 3' >> /path/to/file.txt
こちらだと、ヒアドキュメントに関する知識が無くても処理内容を理解できますが、1行目テキストのカラム位置がずれるので後で見たときに勘違いしてしまうリスクがあります。
こちらもおススメ