我想在Bash中执行一个长时间运行的命令,并且都捕获它的退出状态
所以我这么做:
command | tee out.txt
ST=$?
问题在于,变量ST捕获了tee
而不是命令。我怎么解决这个问题?
发布于 2018-02-07 02:42:41
有一个内部Bash变量称为$PIPESTATUS
;它是一个数组,它保存了最后一个命令前景管道中每个命令的退出状态。
<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0
或者另一种也适用于其他shell(如zsh)的方法是启用pipeFailure:
set -o pipefail
...
zsh
因为语法有点不同。
发布于 2018-02-07 03:29:45
使用bash的set -o pipefail
是有帮助的
管道的返回值是在非零状态下退出的最后一条命令的状态,如果没有发出具有非零状态的命令,则为零。
发布于 2018-02-07 04:09:46
通过命名管道(Mkfifo)将它们连接起来。然后可以运行第二个命令。
mkfifo pipe
tee out.txt < pipe &
command > pipe
echo $?
https://stackoverflow.com/questions/-100003464
复制相似问题