bash - BASH 脚本中的 PIPESTATUS[0]
问题描述
我正在 Unix Bash 脚本中实现一个场景。我有两个脚本 ABC.bash 和 XYZ.bash。当请求者未输入 Y 或 y 脚本退出并显示消息且不再工作时,ABC.bash 中有一种情况。ABC.bash 单独运行时工作正常。当我从另一个 bash 脚本(即 XYZ.bash)运行它时出现问题。它不检查退出条件。XYZ.bash 中的逻辑语法。
echo "Calling ABC.bash from XYZ.bash"
ABC.bash $a $b | tee -a $LOGFILE; sleep 2
if [ ${PIPESTATUS[0]} = 0 ]
then
echo "Do some work"
else
echo "Check ABC.bash input"
exit 1
fi
但是当ABC.bash $a $b以状态 2 退出时,流仍然进入 IF 块而不是 ELSE。在日志中我可以看到消息DEBUGMODE 设置为 0。我需要这个 DEBUGMODE 设置,因为它是必需的,但如果 ABC.bash 退出,我想退出。理想情况下,它应该进入 ELSE 部分,因为 ABC.bash 因用户输入错误而退出。
此外,我在 XYZ.bash 脚本中设置了 DEBUGMODE 选项。喜欢-
if [[ -z "$1" ]]
then
echo " ">> No input so default to 0"
DEBUGMODE=0
else
echo "DEBUGMODE set to $1"
DEBUGMODE=$1
fi
enter code here
解决方案
问题是这PIPESTATUS
是一个易变的变量。也就是说,只要执行任何其他命令,它就会被重置。sleep 2
如果要检查PIPESTATUS
.
推荐阅读
- excel - 如何异步运行两个代码?
- python - 将参数传递给python应用程序?
- amazon-web-services - 批处理作业监视规则的 cloudformation 模板
- c# - 如何遍历字典中特定范围的 KeyValuePairs?
- java - maven javadoc 显示注释两次
- python - 检查我的机器人发送的已存储嵌入列表中是否已存在嵌入
- github - 当 Ansible 任务失败时,如何打印自定义错误消息?
- c# - 实体框架核心 postgresql 数组类型映射不起作用
- powerbi - 如何修复无法在 DAX 中将多列转换为标量值
- flutter - 是否可以在颤动中以编程方式模拟按键事件?