echo 'echo "hello, world!";sleep 3;' | parallel
此命令在完成之前不会输出任何内容。Parallel 的手册页声称:
GNU 并行确保命令的输出与按顺序运行命令时的输出相同。
我猜魔鬼在措辞中:你得到的输出与正常运行它相同,但输出与正常运行它不同。例如,我已经寻找了一个可以执行此操作的选项--results /dev/stdout
,但这不起作用。
我的用例是查看我正在运行的命令的实时进度输出。这不是关于已经完成了多少任务,哪些并行可以为我显示,而是关于我想要查看的每个命令的进度输出。
我会使用 bash 循环for i in $x; do cmd & done;
(
是否可以并行执行此操作?如果没有,还有其他工具吗?
我想你正在寻找
--ungroup
. 手册页说:-u
当然是 的同义词--ungroup
。要查看一些并行作业的进度,请尝试
--tmuxpane --fg
:您也可能正在寻找
-u
or (更有可能)--lb
。来自man parallel
:[...]
一个
-u
闪耀的例子是 stdout 和 stderr 混合在同一行中:这将使用
--lb
和错误地格式化--group
。但由于进程之间的半行混合,甚至
-u
不能保证它的格式正确:http: //mywiki.wooledge.org/BashPitfalls#Non-atomic_writes_with_xargs_-P我的解决方案是将输出记录到文件中,并使用命令实时观察它的变化
tail -f <file>
,然后在工作完成后自动删除它们。我还发现--progress
标志很有用。这里的作业将包括
program
使用不同的输入运行A
,并将程序的输出发送到相应的日志文件B
。C