微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash 管道:获取管道中前一个进程的退出状态

如何解决Bash 管道:获取管道中前一个进程的退出状态

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

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 是通用的,我无法控制它。

想法:

  • 当 program1 以非零状态退出时,logger.sh 端是否收到任何信号?
  • 我能否找到“program1”的 PID 并获取退出状态?
  • ...

解决方法

我认为你可以通过这个实现你想要的:

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

那么您根本不需要 logger.sh

这会将 stdoutprogram1 重定向到 program1.log,如果 program1 的退出代码非零,则将打印 program1.log。之后,program1.log 被删除。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。