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

ただし、最初の項目がゼロ以外の戻りコードで終了した場合、2番目の項目の実行を避けるには、その戻りコードを「マスク」する必要があります。たとえば、サブシェルに入れる必要があります。

{ [[ -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

関連情報