我正在编写一个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;
然而,它似乎并没有起作用。
答案 0 :(得分:1)
问题是管道
$GF_ASADMIN ... | tee -a $LOG
$?
反映了tee
的返回代码。
您正在寻找PIPESTATUS
。见man bash
:
PIPESTATUS
包含退出列表的数组变量(请参阅下面的数组) 来自最近执行的进程的状态值 前台管道(可能只包含一个命令)。
另请参阅此示例以阐明PIPESTATUS
false | true
echo ${PIPESTATUS[@]}
输出为:1 0
更正的代码是:
RC=${PIPESTATUS[0]}
答案 1 :(得分: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"