arrow 若葉プログラミング塾 > 知識の玉手箱 > ワンポイントTips >

リダイレクトとパイプ

 パイプ(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に渡そう。

リダイレクトとパイプ
arrow 若葉プログラミング塾 > 知識の玉手箱 > ワンポイントTips >
KC