在Bash中捕获警报错误

时间:2012-04-13 17:07:13

标签: linux bash shell

我的shell脚本:

sudo /etc/init.d/haproxy reload
if [ $? -ne 0 ]
    then
        echo "Fail to reload services."
fi

在服务重启警报时无法捕获错误,如:

[ALERT] 104/005618 (6110) : Starting frontend tinasay: cannot bind socket

如何捕获警报?

2 个答案:

答案 0 :(得分:0)

您可以重定向stderr并使用正则表达式:

output=$(sudo /etc/init.d/haproxy reload 2>&1)
if [[ $output =~ "ALERT" ]]; then
  echo "Fail to reload services."
fi

答案 1 :(得分:0)

错误消息通常写入文件描述符2,即标准错误。它们可以像这样重定向:

sudo /etc/init.d/haproxy reload 2> /some/log/file.log

这将覆盖该文件,任何现有内容都将丢失。相反,您也可以在追加模式下重定向错误输出:

sudo /etc/init.d/haproxy reload 2>> /some/log/file.log

将在旧邮件之后添加新邮件。

您也不需要像往常一样检查$?,实际上它是一种经典无用的用法。这样做:

if ! sudo /etc/init.d/haproxy reload 2>> /some/log/file.log ; then
    echo "Fail to reload services."
fi

如果返回代码不为0,则将打印“失败”消息。