LoginSignup
7
5

More than 5 years have passed since last update.

catを使った小技

Posted at

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コマンドを使う

catmanページを読むと、引数がない場合は標準入力から読み込むとあります。出力先はechoと同じく標準出力です。

詳細な仕様はわからないのですが(詳しい人教えてください)、catコマンドを引数なしで実行すると、catは「待受」状態に入り、Ctrl-Dが押されるまでに入力されたテキストが標準出力に出力されます(ちなみに、Ctrl-DEOFを入力します(参考)標準入力はストリームですので、要はストリームが終わる(EOF)までに入力された内容をバッファしているということか)。

重要なのは、catの待受状態でエンターキーを押下してもストリームは終了しないので、改行を含むテキストを出力できます。出力をファイルにリダイレクトすることで、ファイルに複数行のテキストを書き込むことができます。

まとめ

vim使おう(´・ω・`)

…じゃなくて、catを使うことで複数行のテキストをファイルに書き込めるよ!

愚痴

この辺の内容、標準ストリームだったりリダイレクトだったりを初心者向けに説明してる書籍ってあんまりないんですよね。manページはここらへんのことは知ってる前提で書かれてるし…

7
5
2

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
7
5