2014-09-02 110 views
0

我有一個名爲deployment.sh的子腳本和名爲deloy_base.sh的父腳本。從父級的deploy_base.sh中,iam通過其他服務器上的ssh調用子腳本。實際上,子腳本正在執行部署過程。如果子腳本中有任何命令失敗,則應將錯誤狀態發送給父腳本,以便我可以根據子腳本中的成功或失敗錯誤代碼發送電子郵件。捕獲通過ssh使用shell腳本從父腳本調用的子腳本的退出代碼

現在不管在子腳本中的任何命令失敗,它總是會成功阻止。請幫忙。

ssh [email protected] "/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 "[email protected]" [email protected] > /dev/null 2>&1` 
    else 
    `mail -s "DEPLOYMENT SUCCESS" -a /home/DEV.log 
    -r "[email protected]" [email protected] > /dev/null 2>&1` 
    Fi 

回答

0

man bash

管道的返回狀態是最後一個命令, 除非pipefail選項啓用的退出狀態。如果管道故障處於啓用狀態,則 管道的返回狀態是以非零狀態退出的最後(最右邊)命令 的值;如果所有命令都成功退出,則爲零。

在你的情況$?tee退出狀態,但

set -o pipefail 

解決了這個問題。