0

我正在编写一个 bash 脚本来管理对多个环境的 GF 服务器的部署。我想知道的是如何获得 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

管道状态

一个数组变量(请参阅下面的数组),其中包含最近执行的前台管道(可能仅包含一个命令)中进程的退出状态值列表。

另请参阅此示例以阐明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 回答