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

그러나 첫 번째 항목이 0이 아닌 반환 코드로 종료되는 경우 두 번째 항목의 실행을 피하려면 해당 반환 코드를 "마스킹"해야 합니다. 예를 들어 하위 쉘에 넣어야 합니다.

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

관련 정보