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

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

我想在Bash中执行一个长时间运行的命令,这两个命令都捕获了它的退出状态,并且三通它的输出。

所以我这么做:

command | tee out.txt
ST=$?

问题在于,变量ST捕获了tee而不是命令。我怎么解决这个问题?

注意,命令是长时间运行的,将输出重定向到一个文件以便以后查看它对我来说不是一个好的解决方案。


萧十郎
浏览 731回答 5
5回答

慕桂英546537

有一个内部Bash变量称为$PIPESTATUS它是一个数组,用于保存上一个命令前台管道中每个命令的退出状态。<command>&nbsp;|&nbsp;tee&nbsp;out.txt&nbsp;;&nbsp;test&nbsp;${PIPESTATUS[0]}&nbsp;-eq&nbsp;0或者,与其他shell(如zsh)一起工作的另一种选择是启用pipeout:set&nbsp;-o&nbsp;pipefail...第一种选择不与.合作zsh因为语法有点不同。

明月笑刀无情

使用bash的set -o pipefail是有帮助的管道的返回值是在非零状态下退出的最后一条命令的状态,如果没有发出非零状态的命令,则为零。

杨__羊羊

哑解决方案:通过命名管道(Mkfifo)将它们连接起来。然后可以运行第二个命令。&nbsp;mkfifo&nbsp;pipe &nbsp;tee&nbsp;out.txt&nbsp;<&nbsp;pipe&nbsp;& &nbsp;command&nbsp;>&nbsp;pipe &nbsp;echo&nbsp;$?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python