为了账号安全,请及时绑定邮箱和手机立即绑定

Bash中管道输出和捕获退出状态

Bash中管道输出和捕获退出状态

萧十郎 2019-07-01 16:03:47
Bash中管道输出和捕获退出状态我想在Bash中执行一个长时间运行的命令,这两个命令都捕获了它的退出状态,并且三通它的输出。所以我这么做:command | tee out.txt ST=$?问题在于,变量ST捕获了tee而不是命令。我怎么解决这个问题?注意,命令是长时间运行的,将输出重定向到一个文件以便以后查看它对我来说不是一个好的解决方案。
查看完整描述

5 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

有一个内部Bash变量称为$PIPESTATUS它是一个数组,用于保存上一个命令前台管道中每个命令的退出状态。

<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0

或者,与其他shell(如zsh)一起工作的另一种选择是启用pipeout:

set -o pipefail...

第一种选择与.合作zsh因为语法有点不同。


查看完整回答
反对 回复 2019-07-01
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

使用bash的set -o pipefail是有帮助的

管道的返回值是在非零状态下退出的最后一条命令的状态,如果没有发出非零状态的命令,则为零。


查看完整回答
反对 回复 2019-07-01
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

哑解决方案:通过命名管道(Mkfifo)将它们连接起来。然后可以运行第二个命令。

 mkfifo pipe
 tee out.txt < pipe &
 command > pipe
 echo $?


查看完整回答
反对 回复 2019-07-01
  • 5 回答
  • 0 关注
  • 730 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信