首页 > 解决方案 > Bash pipe:获取管道中前一个进程的退出状态

问题描述

我正在编写一个记录器来捕获脚本的输出,并在前一个程序失败或成功时以不同方式处理该输出:

program1 | logger.sh

logger.sh,我计划有类似的东西:

while IFS= read -r line; do
    CAPTURED_OUTPUT="$CAPTURED_OUTPUT\n$line"
done
if "program1 has failed"; then
    echo "$CAPTURED_OUTPUT"
fi

如何在 logger.sh中知道“program1 has failed”?

注意 program1 是通用的,我无法控制它。

想法:

标签: bashpipeexit-code

解决方案


我认为您可以通过以下方式实现您想要的:

program1 > program1.log || cat program1.log
rm program1.log

那么你根本不需要 a logger.sh

这会将stdoutof重定向program1program1.log,如果program1有非零退出代码,program1.log将被打印。之后,program1.log被删除。


推荐阅读