gpt4 book ai didi

linux - 如何捕获多个命令的输出?

转载 作者:IT王子 更新时间:2023-10-29 01:15:23 33 4
gpt4 key购买 nike

我有命令生成属于不同命令的输出。

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

$s 将只包含 dd 命令的输出。我怎样才能有另一个变量来包含 time 的输出?

最佳答案

尝试以下操作:

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

Chepners 的回答给了我灵感,可以说是更好:

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

$() 已经是一个子shell,所以不需要创建额外的子shell。将 exec 2>&1; 放在命令之前会重定向整个子 shell 的标准输出,将它放在命令之后会使它成为 time 命令的一部分,因此仅适用传递给 time 的命令。省略 exec 和分号将尝试执行内置的系统 time 二进制整数,如果不存在则出错。仅省略 exec 但保留分号将不起作用,因为这将导致仅重定向新 fork 的进程,而内置时间将不是新进程。

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

关于linux - 如何捕获多个命令的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20051333/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com