我有一个名为deployment.sh的子脚本和名为deloy_base.sh的父脚本。从父deploy_base.sh,iam通过其他服务器上的ssh调用子脚本。实际上,子脚本正在进行部署过程。如果子脚本中的任何命令失败,则应将错误状态发送到父脚本,以便我可以根据子脚本中的成功或失败错误代码发送电子邮件。
现在无论子脚本中的任何命令失败,它总是会成功阻止。请帮忙。
ssh user@10.0.0.1 "/home/scripts/deployment.sh" DEV 2>&1 | tee /home/release/DEV.log
if [ $? -ne 0 ]
then
`mail -s "DEPLOYMENT FAILED" -a /home/DEV.log
-r "Deployment_Log@example.com" user@example.com > /dev/null 2>&1`
else
`mail -s "DEPLOYMENT SUCCESS" -a /home/DEV.log
-r "Deployment_Log@example.com" user@example.com > /dev/null 2>&1`
Fi
答案 0 :(得分:0)
man bash
管道的返回状态是最后一个命令的退出状态, 除非启用 pipefail 选项。如果启用了 pipefail ,则 管道的返回状态是最后(最右边)命令的值 以非零状态退出,如果所有命令都成功退出则返回零。
在您的情况下,$?
是tee
的退出状态,但
set -o pipefail
解决了这个问题。