为什么 /usr/bin/time 与 GNU 并行输出相结合会在命令输出之前而不是在命令输出之后产生结果?

为什么 /usr/bin/time 与 GNU 并行输出相结合会在命令输出之前而不是在命令输出之后产生结果?

设想:

$ 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
/usr/bin/time -f "elapsed time %e" cat libs.txt | SHELL=$(type -p bash) parallel --line-buffer --jobs 2 f1

$ bash t1a.sh
elapsed time 0.00
job for lib.a started
job for lib1.a started
job for lib.a done
job for lib1.a done

在这里我们看到elapsed time 0.00出现命令的输出。为什么?

如何使elapsed time 0.00出现命令的输出?

答案1

尝试:

cat libs.txt | SHELL=$(type -p bash) /usr/bin/time -f "elapsed time %e" parallel --line-buffer --jobs 2 f1

相关内容