TL;DR
$ cat > test.txt
line1
line2
[Ctrl-D]
$ cat test.txt
# line1
# line2
前提:echo
コマンドの不便さ
echo
を使ってファイルに何かを書き込むというのはみなさんよくやってると思います。echo
は特にスクリプト内で使われることが多いですが、インタラクティブに使うときには不便さが目立ちます。
特に問題になるのは改行の扱いです。echo
のバージョンによって-e
オプションを受け付けたりそうでなかったりするようです(参考までに、OSXのman
ページでは-e
オプションの記載がありませんでした)。このことから、echo
で改行を扱うのはいささか厄介であるといえます。
まあ、複数行をファイルに書き込みたいならvim
なりなんなり使え、という方針はアリだと思いますが、あえてエディタを開かないことに固執したらどうなるでしょうか。
cat
コマンドを使う
cat
のman
ページを読むと、引数がない場合は標準入力から読み込むとあります。出力先はecho
と同じく標準出力です。
詳細な仕様はわからないのですが(詳しい人教えてください)、cat
コマンドを引数なしで実行すると、cat
は「待受」状態に入り、Ctrl-D
が押されるまでに入力されたテキストが標準出力に出力されます(ちなみに、Ctrl-D
はEOF
を入力します(参考)標準入力はストリームですので、要はストリームが終わる(EOF)までに入力された内容をバッファしているということか)。
重要なのは、cat
の待受状態でエンターキーを押下してもストリームは終了しないので、改行を含むテキストを出力できます。出力をファイルにリダイレクトすることで、ファイルに複数行のテキストを書き込むことができます。
まとめ
vim
使おう(´・ω・`)
…じゃなくて、cat
を使うことで複数行のテキストをファイルに書き込めるよ!
愚痴
この辺の内容、標準ストリームだったりリダイレクトだったりを初心者向けに説明してる書籍ってあんまりないんですよね。man
ページはここらへんのことは知ってる前提で書かれてるし…