捕获的庆典时间脚本变量输出(Capturing the output of bash time in

2019-07-30 20:36发布

我想这样的:

TIMEFORMAT=%R;
foo=$(time wget http://www.mysite.com)
echo $foo

当我执行我看到我想要的输出,但数量不会变富(回声$ FOO打印任何内容)。

这是为什么?

Answer 1:

你是不是捕捉任何foo ,因为time将其输出stderr 。 麻烦的是, wget命令也将大部分产出对stderr 。 要拆分两个流(扔掉从输出wget ),你将需要使用一个子shell :

TIMEFORMAT=%R;
foo=$( time ( wget http://www.example.com 2>/dev/null 1>&2 ) 2>&1 )
echo $foo

这是发生了什么事情的解释...

此命令的内部部分:

( wget http://www.example.com 2>/dev/null 1>&2 )

同时发送stderrstdout/dev/null ,本质上扔掉。

外部分:

foo=$( time ( ... ) 2>&1 )

发送stderrtime命令,相同的地方stdout被发送,以便它可以由被捕获命令替换 ( $()

更新:

如果你想获得真正聪明的,你可以有输出wget通过对通过stderr被耍弄的文件描述符是这样的:

foo=$( time ( wget http://www.example.com 2>&1 ) 3>&1 1>&2 2>&3 )


文章来源: Capturing the output of bash time in script variable