在管道之前从前面的命令获取退出代码

在管道之前从前面的命令获取退出代码

我有这个:

node ${SUMAN_RUNNABLE} | tee -a run.sh.log
EXIT_CODE=$?;

但看起来退出代码始终为 0,因为 tee 提供的是代码而不是节点可执行文件。

在这种情况下,有没有办法从节点可执行文件捕获退出代码?

答案1

https://stackoverflow.com/a/1221870/5020949

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

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

或者,另一种也适用于其他 shell(如 zsh)的替代方案是启用 pipelinefail:

set -o pipefail
...

第一个选项是不是zsh由于语法略有不同,因此可以使用。

相关内容