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

linux – 如何捕获几个命令的输出?

发布时间:2020-12-13 23:09:23 所属栏目:Linux 来源:网络整理
导读:我有命令产生属于不同命令的输出. s=$(time dd if=source of=/dev/null bs=number count=number 21) $s将仅包含来自dd命令的输出.我怎样才能有另一个包含时间输出的变量? 解决方法 请尝试以下方法: s=$({ time dd ... /dev/null;} 21) Chepners的答案给了
我有命令产生属于不同命令的输出.

s=$(time dd if=<source> of=/dev/null bs=<number> count=<number> 2>&1)

$s将仅包含来自dd命令的输出.我怎样才能有另一个包含时间输出的变量?

解决方法

请尝试以下方法:

s=$({ time dd ... > /dev/null;} 2>&1)

Chepners的答案给了我更好的灵感:

s=$(exec 2>&1; time dd ... > /dev/null)

$()已经是子shell,因此无需创建额外的子shell.把exec 2>& 1;在命令重定向整个子shell的stdout之前,在命令之后放置它会使它成为命令的一部分,因此仅应用于传递给时间的命令.省略exec和分号将尝试执行内置的系统时间二进制intead,如果不存在则输出错误.省略exec但保留分号将不起作用,因为只会导致重新定向新的分叉进程,并且内置时间不会是新进程.

哦,顺便说一下,> / dev / null不会将时间本身的输出转储到/ dev / null,因为它也是时间执行的命令的一部分,并且不会应用于时间本身.

(编辑:李大同)

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

    推荐文章
      热点阅读