如何在 Unix 中为 apache 抑制错误消息

如何在 Unix 中为 apache 抑制错误消息

我知道当命令是时我们可以抑制错误消息ls

ls /usr/tbin/httpd || /home/app/httpd/bin/apachectl 2>/dev/null

但是,我想抑制No such file or directory以下命令。不幸的2>/dev/null是没有帮助。

# /usr/tbin/httpd -v || /home/app/httpd/bin/apachectl -v 2>/dev/null
-bash: /usr/tbin/httpd: No such file or directory
Server version: Apache/2.4.12 (Unix)
Server built:   Apr  7 2015 19:15:22
# echo $?
0

您能否建议我如何抑制上面示例中的错误消息?

答案1

最好通过在执行之前测试第一个消息是否存在来完全避免生成消息:

{ [[ -x /usr/tbin/httpd ]] && /usr/tbin/httpd -v ; } || /home/app/httpd/bin/apachectl -v

但是,如果您想避免在第一个以非零返回代码退出时运行第二个,则必须“屏蔽”其返回代码,例如将其放入子 shell 中:

{ [[ -x /usr/tbin/httpd ]] && ( /usr/tbin/httpd -v ; exit 0 ; ) } || /home/app/httpd/bin/apachectl -v

或者在命令组中:

{ [[ -x /usr/tbin/httpd ]] && { /usr/tbin/httpd -v ; true ; } } || /home/app/httpd/bin/apachectl -v

也就是说,一个普通的旧if语句可以被认为更具可读性:

if [[ -x /usr/tbin/httpd ]] 
then 
    /usr/tbin/httpd -v 
else
    /home/app/httpd/bin/apachectl -v
fi

相关内容