プログラムが終了する前にGNUはstdoutを並列に出力できますか?

プログラムが終了する前にGNUはstdoutを並列に出力できますか?
echo 'echo "hello, world!";sleep 3;' | parallel

このコマンドは完了するまで何も出力しません。 Parallelのマニュアルページには次のように記載されています。

GNU並列処理は、コマンドの出力がコマンドを順次実行したときに得られるものと同じであることを保証します。

悪魔が表現にあると思います。正常に実行するのと同じ出力を取得できますが、正常に実行するのと同じ出力を得ることはできません。たとえば、私はこれを行うためのオプションを探していましたが、うまく--results /dev/stdoutいきません。

私のユースケースは、実行中のコマンドのリアルタイムの進行状況出力を確認することです。どのように多くのタスクが完了したのか、どの並列タスクが私に表示できるのかではなく、私が見たい各コマンドの進行状況出力に関するものです。

私はbashループ(for i in $x; do cmd & done;)を使用しますが、Ctrl + C一度ですべての操作を停止できるようにしたいと思います。並列処理でそれを行うことができます。

これを並列に実行できますか?そうでなければ他のツールはありますか?

ベストアンサー1

私はあなたが探していると思います--ungroup。マニュアルページには次のように記載されています。

--group  Group output. Output from each jobs is grouped 
         together and is only printed when the command is finished. 

         --group is the default. Can be reversed with -u.

-uもちろんの同義語です--ungroup

おすすめ記事