当错误代码不够时,如何捕获shell中的错误输出?

当错误代码不够时,如何捕获shell中的错误输出?

我碰到了带有 if-else 分支的脚本,其中特定命令是否成功,如下所示:

pg_ctl -D /var/lib/pgsql/data -w promote
if [ $? -ne 0 ]; then
   echo: failure
   exit 1
else
   echo: succeed
   exit 0
fi

看起来很简单。但是,如果它想要提升的 postgresql 服务器已经作为主服务器运行,它也会抛出错误代码=1 和包含“未处于待机模式”的错误消息。因此,如果出现此错误,但错误代码=1 或$? -ne 0产生误报,则没问题。我只想将这个特定错误作为另一个成功结果,我该如何实现?

答案1

没有直接的 bash 变量来$?捕获确切的错误消息,但是可以将结果存储在文本文件中以供分析。在本例中,脚本如下:

pg_ctl -D /var/lib/pgsql/data -w promote &> promote_return
if [ $? -ne 0 ]; then
   if [ `grep -c 'is not in standby mode' promote_return` -ne 0 ]; then
     echo okay: no need to promote twice.
     exit 0
   else 
     echo failure: please check the file promote_return for error message.
     exit 1
   fi
else
   echo succeed
   exit 0
fi

相关内容