パイプ


始めてシェルを使った時、そして今でも画期的だと思えるのは、パイプの機能。

あるプログラムの出力を他のプログラムに簡単に渡すことができる。

例えば、

ps auxw | grep java

ps はプロセスの一覧

grep は文字列の検索

プロセスの一覧から、java 文字列を検索する。当然、その後にまた処理をしたければ、パイプで渡す。

標準入力からデータをもらって、標準出力にデータを出力する。そして、標準出力と標準入力を接続するのがパイプ。

ちなみにエラーメッセージは渡したくないことが多々あるので、エラーメッセージは標準エラー出力に出力され、標準出力とは区別される。標準エラー出力を標準出力に無理矢理出力する方法もあて、/bin/sh ならば、2>&1 を付けるとよい。(2 は標準エラー出力の番号で、1は標準出力の番号)

小さなプログラムをつなげて使う、というのが元々の思想と聞いた記憶がある。less is more ということか。

はるか昔、こういったことが、UNIXマガジンや、UNIXプログラミング環境や、楽しい UNIX、BSD オペレーティングシステムなどといった本に載っていて、夢中になって試していました。本当に楽しい本だったと思う。もう無いのかな?