0

いくつかの環境でGFサーバーへのデプロイメントを管理するためのbashスクリプトを書いています。私が知りたいのは、GFコマンドの結果を取得して、続行するか終了するかを決定する方法です。

例えば

再デプロイしたいとします。このスクリプトがあります

$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;

ただし、実際には機能していないようです。

4

2 に答える 2

1

問題はパイプ

$GF_ASADMIN ... | tee -a $LOG

$?の戻りコードを反映しますtee

を探していPIPESTATUSます。参照man bash:

パイプステータス

最近実行されたフォアグラウンド パイプライン (1 つのコマンドのみを含む場合がある) 内のプロセスからの終了ステータス値のリストを含む配列変数 (以下の「配列」を参照)。

明確にするために、この例も参照してください。PIPESTATUS

 false | true 
 echo ${PIPESTATUS[@]}

出力は次のとおりです。1 0

修正されたコードは次のとおりです。

RC=${PIPESTATUS[0]}
于 2013-03-12T09:42:24.043 に答える
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"
于 2013-03-12T10:12:58.357 に答える