gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:53:09 24 4
gpt4 key购买 nike

我有一个名为deployment.sh的子脚本和名为deloy_base.sh的父脚本。从父部署_base.sh,iam 通过其他服务器上的 ssh 调用子脚本。实际上子脚本正在执行部署过程。如果子脚本中的任何命令失败,则错误状态应发送到父脚本,以便我可以根据子脚本的成功或失败错误代码发送电子邮件。

现在,无论子脚本中的任何命令失败,它总是会进入成功 block 。请帮忙。

 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

最佳答案

man bash

The return status of a pipeline is the exit status of the last command, unless the pipefail option is enabled. If pipefail is enabled, the pipeline's return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully.

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

set -o pipefail

解决了问题。

关于linux - 使用 shell 脚本捕获通过 ssh 从父脚本调用的子脚本的退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25623427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com