设想:
$ cat libs.txt
lib.a
lib1.a
$ cat t1a.sh
f1()
{
local lib=$1
stdbuf -o0 printf "job for $lib started\n"
sleep 2
stdbuf -o0 printf "job for $lib done\n"
}
export -f f1
cat libs.txt | SHELL=$(type -p bash) parallel --jobs 2 f1
调用及输出:
$ time bash t1a.sh
job for lib.a started
job for lib.a done
job for lib1.a started
job for lib1.a done
real 0m2.129s
user 0m0.117s
sys 0m0.033s
这里我们看到 的执行f1
确实是并行的 ( real 0m2.129s
)。
但是,诊断输出看起来执行是连续的。
我期望得到以下诊断输出:
job for lib.a started
job for lib1.a started
job for lib.a done
job for lib1.a done
为什么诊断输出看起来像顺序执行而不是并行执行?
如何修复诊断输出,使其看起来像并行执行?
来自GNU
parallel
的手册页:[...]
因此,您应该将
--line-buffer
或添加--ungroup
到您的parallel
命令中(根据您的首选行为):