/ usr / bin / time只计时管道的第一个组件

时间:2016-02-09 23:28:37

标签: linux bash shell command-line

我正在尝试对以下命令进行计时,并最终想要将结果输出到文件(因此使用/ usr / bin / time。但是,正在计时的命令总是seq 1 2而不是整个命令:

/usr/bin/time -v seq 1 2 | parallel ssh-keygen -G /folder/{}.candidate -b 768

有没有办法确保整个命令是定时的,而不仅仅是第一个小部分?

1 个答案:

答案 0 :(得分:6)

如果您使用bash,则更容易使用内置的bash:

$ time cmd1 | cmd2 | cmd3

将为整个管道计时。

如果您真的想使用外部time命令,则必须在子shell中运行管道:

$ /usr/bin/time sh -c 'cmd1 | cmd2 | cmd3'

或者你要管道时间而不是给管子计时。

这种语法也有很好的副作用,很容易将命令的输出和time的输出分开:

$ /usr/bin/time sh -c 'cmd1 | cmd2 > cmdout.txt 2> cmderr.txt' 2>> time.txt

然而,它在引号中有一个额外的困难。如果你的命令本身包含引号,你可能需要以难以阅读的方式转义它们。