我正在尝试对以下命令进行计时,并最终想要将结果输出到文件(因此使用/ usr / bin / time。但是,正在计时的命令总是seq 1 2而不是整个命令:
/usr/bin/time -v seq 1 2 | parallel ssh-keygen -G /folder/{}.candidate -b 768
有没有办法确保整个命令是定时的,而不仅仅是第一个小部分?
答案 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
然而,它在引号中有一个额外的困难。如果你的命令本身包含引号,你可能需要以难以阅读的方式转义它们。