2013-05-28 2 views
3

이 명령 줄의 리디렉션 작업이 bash에 의해 무시되는 이유는 무엇입니까? 표준 오류를 표준 출력으로 리디렉션 한 다음 전체를 공백으로 보내려고합니다. 그 wget과 죽은 링크를 확인할 수 있도록이 셸 명령의 출력을 어떻게 억제합니까?

(cd ../src/ && python -m SimpleHTTPServer 8000 2>&1 > /dev/null) & 

나는, 일부 정적 웹 콘텐츠에 SimpleHTTPServer를 실행하고 있습니다. 그러나 wget 로그 파일은 필요한 모든 정보를 제공하므로 서버의 오류 (실패한 페이지 요청)를보고 싶지 않습니다.

그럼에도 불구하고

, 나는이 실행 ...

(cd ../log/ && wget --quiet --spider --recursive -o spider.log http://localhost:8000/ 2>&1 > /dev/null) 

... 백그라운드에서 실행 원래 SimpleHTTPServer 명령이 실패 리소스 요청, 같은 대한 표준 오류 보고서를 분출을 영위하는 ...

127.0.0.1 - - [28/May/2013 17:22:31] "GET /technology/actuator.html HTTP/1.1" 200 - 
127.0.0.1 - - [28/May/2013 17:22:31] code 404, message File not found 

답변

4

먼저 stdout (1)과 stderr (2)가 터미널을 가리 킵니다.

그런 다음 stderr를 가리키는 표준 출력으로 리디렉션합니다. (터미널입니다.)

나중에 표준 출력을 /dev/null으로 리디렉션합니다. 그러나 stderr는 여전히 터미널을 가리 킵니다.

다른 방법으로 수행 할 수 있습니다. >/dev/null 2>&1 : 이렇게하면 stdout을 /dev/null으로 리디렉션 한 다음 stderr을 리디렉션합니다.

배시는이 경우 축약어 &>/dev/null을 제공합니다.

0

&>/dev/null을 사용하면 모든 것을 억제 할 수 있습니다.

관련 문제