捕获脚本变量中的bash时间输出

前端之家收集整理的这篇文章主要介绍了捕获脚本变量中的bash时间输出前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试这个:
TIMEFORMAT=%R;
foo=$(time wget http://www.mysite.com)
echo $foo

当我执行时,我会在输出中看到我想要的数字,但不会在变量foo中看到(echo $foo什么都不打印).

这是为什么?

你没有在foo中捕获任何东西,因为时间在stderr上发送它的输出.问题是wget命令还在stderr上发送了大部分输出.要拆分两个流(并丢弃wget的输出),您需要使用 subshell
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发送到的相同位置,以便它可以被command substitution($())捕获.

更新:

如果你想变得非常聪明,可以通过像这样处理文件描述符来将wget的输出传递给stderr:

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

猜你在找的Bash相关文章