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

2 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
Run Code Online (Sandbox Code Playgroud)

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

rod*_*igo 6

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

$ time cmd1 | cmd2 | cmd3
Run Code Online (Sandbox Code Playgroud)

将整个管道计时.

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

$ /usr/bin/time sh -c 'cmd1 | cmd2 | cmd3'
Run Code Online (Sandbox Code Playgroud)

或者你要管道时间而不是计时管道.

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

$ /usr/bin/time sh -c 'cmd1 | cmd2 > cmdout.txt 2> cmderr.txt' 2>> time.txt
Run Code Online (Sandbox Code Playgroud)

但是,它在引号中有一个额外的难度.如果您的命令本身包含引号,则可能需要以难以阅读的方式转义它们.