我想要time
一个命令,它由两个单独的命令组成,一个管道输出到另一个。例如,考虑以下两个脚本:
$ cat foo.sh
#!/bin/sh
sleep 4
$ cat bar.sh
#!/bin/sh
sleep 2
Run Code Online (Sandbox Code Playgroud)
现在,我怎样才能time
报告所花费的时间foo.sh | bar.sh
(是的,我知道管道在这里没有意义,但这只是一个例子)?如果我在没有管道的子shell中按顺序运行它们,它确实按预期工作:
$ time ( foo.sh; bar.sh )
real 0m6.020s
user 0m0.010s
sys 0m0.003s
Run Code Online (Sandbox Code Playgroud)
但是我在管道时无法让它工作:
$ time ( foo.sh | bar.sh )
real 0m4.009s
user 0m0.007s
sys 0m0.003s
$ time ( { foo.sh | bar.sh; } )
real 0m4.008s
user 0m0.007s
sys 0m0.000s
$ time sh -c "foo.sh | bar.sh "
real 0m4.006s
user 0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一个类似的问题(How to …