仅当“time”之后的命令成功时才显示“time”的输出

man*_*tor 4 command-line time exit-status

time我希望仅当已传递的命令time成功时才显示命令的输出。像这样的东西:

( time wget -pq --delete-after https://www.example.com ) 2>&1 || echo fail
Run Code Online (Sandbox Code Playgroud)

问题是,如果wget失败,我仍然收到输出time(这是合乎逻辑的,因为它测量命令失败所需的时间)。我的目标是将输出保存到变量中,并在我的变量中包含0m0.100sfail。有谁知道我该如何以体面的方式做到这一点?

jes*_*e_b 5

你可以这样做:

$ if var=$( { time true; } 2>&1 ); then echo "$var"; else echo fail; fi

real    0m0.000s
user    0m0.000s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
$ if var=$( { time false; } 2>&1 ); then echo "$var"; else echo fail; fi
fail
Run Code Online (Sandbox Code Playgroud)

  • `var=$( { time sleep 1; } 2>&1 )` 应该与 Bash、ksh 和 zsh 一起使用(尽管 `time true` 不会在我的 zsh 中打印任何内容,嗯) (2认同)