代码之家  ›  专栏  ›  技术社区  ›  hynespm

使用glassfish命令捕获Bash中的错误[管道中的返回代码]

  •  0
  • hynespm  · 技术社区  · 13 年前

    我正在编写一个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;
    

    然而,它似乎真的不起作用。

    2 回复  |  直到 13 年前
        1
  •  1
  •   H.-Dirk Schmitt    13 年前

    问题在于 管

    $GF_ASADMIN ... | tee -a $LOG
    

    $? 反映的返回代码 tee .

    您正在寻找 PIPESTATUS 看见 man bash :

    管道状态

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

    另请参阅此示例,以澄清 管道状态

     false | true 
     echo ${PIPESTATUS[@]}
    

    输出为: 1 0

    更正后的代码为:

    RC=${PIPESTATUS[0]}
    
        2
  •  0
  •   Scrutinizer    13 年前

    或者尝试使用代码块重定向,例如:

    {
      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"
    
    推荐文章