Section Next | Prev


3.3.2 パイプとフィルター

シェルは、コマンドの標準出力(stdout)を他のコマンドの標準入力(stdin)に 連結することができます。

この手法をパイプと呼び、縦棒(|)を使用します。

	$ ls -l | lpr
とすると、 ls コマンドの出力をパイプによって lpr コマンドの入力として渡すので、 ls の結果がプリンタに出力されます。

これは、次の様にコマンドを続けて実行したのと同じようになります。

	$ ls -l > test.out
	$ lpr test.out
パイプはメモリ上でデータの受け渡しをしますので、 ディスクI/Oがない分実行が速くなります。
また、パイプでつながれたコマンドはマルチタスクで並行実行されます。
このように、パイプで結ばれたコマンド群をパイプラインと呼びます。論理的には、 パイプによって連結できるコマンド数には、上限がありません。 (実際にはユーザが生成できるプロセスの上限や、 入力できるコマンド文字列の長さなどの制約があります)

コマンド wc のように標準入力からデータを読み込み、 実行結果を標準出力に出力するようなプログラムをフィルターと呼びます。

	$ ls -ld . | wc 
		1    9   46
補足事項
パイプは標準出力と、標準入力を連結するため前段のコマンドが出力した エラー出力は無視されます。
エラー出力を標準出力に連結することも可能です。
	$ ls -ld . /xxx | wc
	ls: /xxx: No such file or directory	# エラー出力はパイプライン外に流れる
	      1       9      46

	$ ls -ld . /xxx 2>&1 | wc
	      2      16      82

Section Next | Prev

Copyright 2007-2018 ycosSystems Shell/Body332.html