加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:19:29 所属栏目:安全 来源:网络整理
导读:我正在尝试这个: TIMEFORMAT=%R;foo=$(time wget http://www.mysite.com)echo $foo 当我执行时,我会在输出中看到我想要的数字,但不会在变量foo中看到(echo $foo什么都不打印). 这是为什么? 你没有在foo中捕获任何东西,因为时间在stderr上发送它的输出.问题
我正在尝试这个:
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 )

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读