試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

任意の複数行テキストをコマンドでファイルに書き出す

シェル上でヒアドキュメント(Here document)という方法を用いると複数行の文字列を標準入力として受け取ることができる。
「<<」の後ろの文字列の内容の行を渡すまでの間に入力した内容が標準入力となる。終端を示す文字列として「EOF」*1がよく用いられるが、「EOF」という行を含むテキストを書き出すには他の文字列を指定する。
catコマンドは引数を付けずに実行すると標準入力の内容をそのまま標準出力に出力するのだが、これを利用してリダイレクトで任意の内容を(コマンド実行により)ファイルに書き出すことができる。

(「EOF」という行を終端にする場合)
$ cat <<EOF > [ファイル]
> 書き出したい文字列
> 書き出したい文字列
> 書き出したい文字列
> ...
> EOF

(「FOO」という行を終端にする場合)
$ cat <<FOO > [ファイル]
> 書き出したい文字列
> 書き出したい文字列
> 書き出したい文字列
> ...
> FOO

実際にはシェルスクリプト内で(決まった内容のテキストファイルを作成するために)

cat <<EOF > [ファイル]
内容...
EOF

のように用いられることが多い。また、(差分データを標準入力で受け付ける)patchコマンドを差分データ付きで

patch -p0 <<EOF
[パッチの内容...]
EOF

のような形で実行することもできる。

*1:End Of File