使用shell脚本从父脚本捕获通过ssh调用的子脚本的退出代码

时间:2014-09-02 12:25:56

标签: linux shell ssh

我有一个名为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

1 个答案:

答案 0 :(得分:0)

man bash

  

管道的返回状态是最后一个命令的退出状态,   除非启用 pipefail 选项。如果启用了 pipefail ,则   管道的返回状态是最后(最右边)命令的值   以非零状态退出,如果所有命令都成功退出则返回零。

在您的情况下,$?tee的退出状态,但

set -o pipefail

解决了这个问题。