我想这样的:
TIMEFORMAT=%R;
foo=$(time wget http://www.mysite.com)
echo $foo
当我执行我看到我想要的输出,但数量不会变富(回声$ FOO打印任何内容)。
这是为什么?
我想这样的:
TIMEFORMAT=%R;
foo=$(time wget http://www.mysite.com)
echo $foo
当我执行我看到我想要的输出,但数量不会变富(回声$ FOO打印任何内容)。
这是为什么?
你是不是捕捉任何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 )
同时发送stderr
和stdout
到/dev/null
,本质上扔掉。
外部分:
foo=$( time ( ... ) 2>&1 )
发送stderr
从time
命令,相同的地方stdout
被发送,以便它可以由被捕获命令替换 ( $()
更新:
如果你想获得真正聪明的,你可以有输出wget
通过对通过stderr
被耍弄的文件描述符是这样的:
foo=$( time ( wget http://www.example.com 2>&1 ) 3>&1 1>&2 2>&3 )