2013-03-12 38 views
0

我正在編寫一個bash腳本來管理針對多個環境的GF服務器的部署。我想知道的是如何獲得GF命令的結果,然後確定是繼續還是退出。在bash中使用glassfish命令捕獲錯誤[在管道中返回代碼]

例如

說我要重新部署,我有此腳本

$GF_ASADMIN --port $GF_PORT redeploy --name $EAR_FILE_NAME --keepstate=true $EAR_FILE | tee -a $LOG 

的變量已經被定義。因此,GF將開始重新部署,無論是成功還是失敗。我想檢查它是否有效,並採取相應措施。之後我有這個權利。

RC=$? 
if [[ $RC -eq 0 ]]; 
    then echoInfo "Application Successfully redeployed!" | tee -a $LOG; 
else 
    echoError "Failed to redeploy application!" 
    exit 1 
fi; 

但是,它似乎並沒有工作。

回答

1

的問題是

$GF_ASADMIN ... | tee -a $LOG 

$?反映tee返回代碼。

您正在尋找PIPESTATUS。見man bash

PIPESTATUS

一個數組變量(見下文陣列)包含從最近最多執行的 前臺管道的過程退出 狀態的值的列表(其可以僅包含單個命令)。

也參見該例子中,以澄清PIPESTATUS

false | true 
echo ${PIPESTATUS[@]} 

輸出是:1 0

校正的代碼是:

RC=${PIPESTATUS[0]} 
0

,或者嘗試使用代碼塊重定向,用於例如:

{ 
    if "$GF_ASADMIN" --port $GF_PORT redeploy --name "$EAR_FILE_NAME" --keepstate=true "$EAR_FILE" 
    then 
    echo Info "Application Successfully redeployed!" 
    else 
    echo Error "Failed to redeploy application!" >&2 
    exit 1 
    fi 
} | tee -a "$LOG"