5 パイプ、リダイレクション等

Unix では、コマンドの標準入力 (stdin, 通常はキーボードからの入力)、 標準出力 (stdout, 通常は画面出力) をファイルに切り替えたり、 他のコマンドに渡すための仕組みがあります。 基本的には以下のように使います。 これは、以下のように多段に組み合わせて使うことも可能です。
% com1 < file1 | com2 | com3 > file2
この場合、 ということになります。 上の com1, com2, com3 のように、標準入力からデータをもらい、 それを加工して標準出力に流すプログラムを フィルタ と呼びます。 Unix ではこの仕組みにより、 単一の仕事しかしない複数のフィルタを組み合わせて必要な多段階の加工を行う、 という作業がよく行われ、 そのための色々なフィルタが用意されています (4.5 節の外部コマンドの多くもその類いです)。

出力リダイレクションには、次のような別の形式もあります。

また、<< は、 ヒアドキュメント として使われます。

command << name
string
...
name
これは、name までの文字列の並びを command への標準入力として渡します。 一行の文字列なら、コマンド echo を使って
echo "string" | command
としても渡せるのですが、 ヒアドキュメントは複数行の文字列を渡すときに便利です。 name は渡す文字列内に現れない任意の文字列を使用できます。 name の代わりに 'name' とすれば 文字列部分の変数展開は行われません。

パイプ以外で、複数のコマンドを 1 行で連続実行することもできます2

3 つ以上を並べることも可能です。

これらの `;', `||', `&&' を含んだコマンド列を ( ) でくくると、 それ自体が一つのコマンドとみなされ、 それをまたコマンド列の要素とすることもできます。例:

com1 | ( com2 > file1 ; com3 file1 ) | com4

竹野茂治@新潟工科大学
2008年1月13日