パイプ(pipe)とは、
UNIX で実現された、プログラム同士を組み合わせて利用するための一手法の名称である。
パイプライン(pipeline)ともいう。このアイデアは、
MS-DOS をはじめとする様々な
OS やアプリケーションに受け継がれている。
以下が典型的な
パイプの利用例である。|(バーティカルバー) は
シェルに
パイプを指示する記号である。
List. 1 grep 札幌市 Address.txt | a2ps | lpr
これは
- ファイル Address.txt から "札幌市" が含まれる行を出力し
- その出力を入力として受け取って a2ps コマンドを用いて整形し
- その出力を印刷する
といった流れを示したものである。以下も同じ処理を
行う手続きであるが、
List. 2 grep 札幌市 Address.txt > sapporo.txt a2ps < sapporo.txt > print.ps lpr < print.ps
このような中間
ファイルを利用する方法より、簡潔な記述とすばやい動作が期待できる。
List. 2 では、1 つ目のプログラムが完全に終了して初めて 2 つ目のプログラムが動き出し、2 つ目のプログラムが終了して初めて 3 つめのプログラムが動き出すが、List. 1 では、可能であれば 3 つのプログラムが
マルチタスクにより同時に動く。また、データの受け渡しは
ファイルではなく
メモリ上で
行われる。このため、一般的に List. 2 よりも List. 1 の方が高速である。ただし、
MS-DOS はシングル
タスク OS であるため、List. 1 のように指示しても内部で中間
ファイルが作られるので、実際には List. 2 を指示したのと同じ意味になる(処理が終われば中間
ファイルは
MS-DOS により削除され、ユーザには何もなかったように見える)。
UNIX の思想の
バックボーンには、それぞれの役割に特化したプログラムを組み合わせ、複雑な機能を実現する(ツールキットアプローチ、
分割統治法)がある。
パイプはその典型であり、
UNIX を利用する大きな魅力のひとつとなる。