捕获脚本变量中的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 ) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |