出力を1行ずつリダイレクトするほとんど使用されていないbashパイプタイプについて、どこかで読み取った記憶があります(後で忘れました)。つまり、出力を最後に一度リダイレクトするのではなく、各改行文字の出力をリダイレクトし、受信プロセスを複数回実行します。見つけることができるすべての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
。これを使用して、出力があるコマンドから別のコマンドにパイプされたときに発生するバッファリングを無効にできます。
次のコマンドを使用すると、ページがバッファリングされるまで出力は表示されません。
$ od -c /tmp/fifo | more
次のように自動バッファリングを無効にできます。
$ unbuffer od -c /tmp/fifo | more
通常、アンバッファはSTDINから読み込まれません。これによりunbuffer
、特定の状況での使用が簡素化されます。パイプラインで使用するには、unbuffer
-pフラグを使用してください。
$ process1 | unbuffer -p process2 | process3