
どこかで (どこだったかは忘れましたが)、出力を 1 行ずつリダイレクトできる、めったに使用されないタイプの bash パイプについて読んだのを覚えています。言い換えると、出力を最後に 1 回リダイレクトするのではなく、出力は改行ごとにリダイレクトされ、受信プロセスが複数回実行されます。入手できるすべての bash ドキュメントを調べましたが、この「パイプ」が本当に存在するかどうかわかりません。
行単位のパイプというものはあるのでしょうか? もちろん、このタスクは他の方法でも簡単に実行できますが、もっとエレガントな方法があるかどうか興味があります。
答え1
xargs を探しているのだと思います。つまり、ディレクトリ内のすべての .bak ファイルを見つけて削除したいとします。
find . -name "*.bak" -type f -print | xargs /bin/rm -f
見つかったファイルごとに結果をパイプし、ファイルを削除します。
http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/
答え2
ツールのことを考えていると思いますunbuffer
。これを使用すると、出力がパイプを介して 1 つのコマンドから別のコマンドに送信されるときに発生するバッファリングを無効にすることができます。
次のようなコマンドでは、ページ分のデータがバッファリングされるまで出力は表示されません。
$ od -c /tmp/fifo | more
この自動バッファリングは次のようにして無効にできます。
$ unbuffer od -c /tmp/fifo | more
通常、unbuffer は STDIN から読み取りません。これにより、unbuffer
状況によっては使用が簡単になります。unbuffer
パイプラインで使用するには、-p フラグを使用します。
$ process1 | unbuffer -p process2 | process3