bash - 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 是通用的,我无法控制它。
想法:
- 当 program1 以非零状态退出时,logger.sh 端是否收到任何信号?
- 我可以找到“program1”的 PID 并获得它的退出状态吗?
- ...
解决方案
我认为您可以通过以下方式实现您想要的:
program1 > program1.log || cat program1.log
rm program1.log
那么你根本不需要 a logger.sh
。
这会将stdout
of重定向program1
到program1.log
,如果program1
有非零退出代码,program1.log
将被打印。之后,program1.log
被删除。
推荐阅读
- swift - 参数类型“T.Type”不符合预期类型“Comparable”
- git - Can Git submodules track same name branch always based on superproject branch name
- javascript - jQuery.key returns Unindentified Android keyboard
- html - 在 chrome 66 中禁用自动完成
- python - SSLError:在 naoqi 版本 2.1.4 上使用 pip 安装软件包时出现问题
- javascript - 在类中不使用扩展运算符合并对象属性
- c# - c#如何识别两个不同大小矩形上的坐标?
- php - Laravel 5.6 和反射找不到类
- php - SQLSTATE[HY093]: Invalid parameter number: 循环插入数据时未定义参数
- sql-server-2014 - 'Select * into' 如何在后台工作?