皆さんが,“標準入力”,“標準出力”,そして“標準エラー出力”の特定の 概念で,シェルのI/Oリダイレクションの基本に慣れていると想定しています. 要するに,“標準入力”はデータソースで,データがやってくるところです. データソースが,ディスクファイル,キーボード,磁気テープやパンチカード かどうか,プログラムは知る必要も注意する必要もありません.同様に,“標 準出力” はデータシンクで,データが出て行くところです.プログラムはそ の場所を知る必要も注意する必要もありません.標準入力を読み込み,データ に何かを行い,それを送り続けるプログラムは,フィルタ(filters)と 呼ばれ,それは水のパイプラインでのフィルタに似ているためです.
Unixシェルを用いた場合,データパイプラインを設定することは非常に簡単で す.
program_to_create_data | filter1 | .... | filterN > final.pretty.data
我々は生データを作ることから始めます.それぞれのフィルタは,それがパイ プラインから出てくるまで,いくつかの連続した変換をデータに適用し,その ようなものが望ましい形式です.
これは素晴らしく,標準入力と標準出力に適しています.標準エラー出力は,
動作中どこに行きますか?まあ,上記のパイプラインfilter1
について
考えて見てください.データでエラーが発生した場合,何が生じるのでしょう?
エラーメッセージを標準出力に書き出す場合,それはfilter2
の入力の
パイプラインの下に隠れ,ユーザーはおそらく見ることはありません.そのた
め,プログラムはユーザに注意を促すため,エラーメッセージを送ることが可
能な場所が必要です.これは標準エラー出力で,画面から離れているプログラ
ムの標準出力をリダイレクトしてさえ,それは通常コンソールやウィンドウに
連結しています.
フィルタプログラムが一緒に動作するため,データの書式が合意されている必
要があります.最も簡単で最も容易な書式は,単なるテキストの行です.通常,
Unixデータファイルは,慣習でUnixの文献で“改行”と呼ばれる,
ASCII lf (Line Feed)文字で分けられた行を用いた,単なる
バイトのストリームです.(これは,Cプログラマの場合は'\n'
です.)
これは全ての伝統的なフィルタプログラムで用いられる書式です.(多くのよ
り早期のオペレーティングシステムでは,バイナリデータを管理するため,手
の込んだファシリティと特別な目的を持つプログラムがありました.Unixは常
にそのようなことから身をかわしていて,その哲学の下では,テキストエディ
タでデータを見たり編集したりすることを単純に可能にする最も簡単な方法で
す.)
OK,十分紹介しました.いくつかの道具を一目見て,それから,興味深い方法 でそれらを一緒に束ねる方法を見ましょう.以下の議論では,これらの興味あ るコマンドラインオプションを紹介するだけです.常に行うように,完全な話 とするために,システムドキュメントを再点検してください.