首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >管道输出和Bash中的捕获退出状态怎么弄?

管道输出和Bash中的捕获退出状态怎么弄?
EN

Stack Overflow用户
提问于 2018-02-07 02:00:03
回答 10查看 0关注 0票数 0

我想在Bash中执行一个长时间运行的命令,并且都捕获它的退出状态

所以我这么做:

代码语言:javascript
复制
command | tee out.txt
ST=$?

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

EN

回答 10

Stack Overflow用户

发布于 2018-02-07 02:42:41

有一个内部Bash变量称为$PIPESTATUS;它是一个数组,它保存了最后一个命令前景管道中每个命令的退出状态。

代码语言:javascript
复制
<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0

或者另一种也适用于其他shell(如zsh)的方法是启用pipeFailure:

代码语言:javascript
复制
set -o pipefail
...

zsh因为语法有点不同。

票数 0
EN

Stack Overflow用户

发布于 2018-02-07 03:29:45

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

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

票数 0
EN

Stack Overflow用户

发布于 2018-02-07 04:09:46

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

代码语言:javascript
复制
 mkfifo pipe
 tee out.txt < pipe &
 command > pipe
 echo $?
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100003464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档