リダイレクトとパイプ
パイプ(pipe)とは、あるプログラムの出力を別のプログラムの入力に引き渡す機能である。パイプを使えば、
$ ls -l | grep 4096 | more
のように、既存のコマンドや自作のプログラムを自由自在に組み合わせて、あたかも新しい機能のコマンドであるかのように使用することができる。
一方、これに良く似た機能にリダイレクト(redirect)がある。リダイレクトは、 標準入出力や標準エラー出力をファイルに置き換える機能である。
$ cat aaa bbb > mix.txt
実は、リダイレクトは
という受け渡しを行うものなのだが、パイプのほうはこれをショートカットして、
と、ファイルを介さずに直接引き渡す。メカニズムとしては同種のものなのである。
さて、上記はUnix/linuxの機能であるが、DOSプロンプトでもほぼ同様に使用できる。各別にまとめて使用例を紹介する。
DOSのパイプ
C:\> type readme.txt | more
ほぼUnix系と同じことができる。
C:\> dir | sort | more
連結もOK。惜しむらくはUnix系ほど便利なコマンドが多くないことだ。
DOSのリダイレクト
C:\> dir > list.txt
これはUnix系とまったく同じ。画面出力をファイルに書き込む。
C:\> type aaa >> bbb
追加書き込みもできます。
C:\> echo Hello! > ccc
エディタもエクスプローラーも使わずにテキストファイルを作る最速の方法。
C:\> myprog 2> error.txt
2>は標準エラー出力のリダイレクトに使用する。
C:\> pyprog > out.txt 2>&1
これは標準出力と標準エラー出力をどちらもout.txtに保存するテクニック。 2>はWindows98/Meなどの16bit系Windowsでは使えないので注意。
コンパイラによっては文法エラーを標準出力に出し、コマンドのエラーを標準エラー出力に出すものもあるので、まとめたいときはこの方法が使える。
BCC32では標準出力に出すので、普通にリダイレクトするか、パイプでMOREに渡そう。