문제

Why are the redirection operations in this command line apparently ignored by bash? I aim to redirect standard error to standard out, and then feed the whole lot into the void.

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

I'm running a SimpleHTTPServer on some static web content, so that wget can check it for dead links. However, I don't want to see the errors from the server (requests for failed pages), as the wget log file provides all the information I need.

Nevertheless, when I run this...

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

...the original SimpleHTTPServer command running in the background carries on spewing out Standard Error reports about failed resource requests, like...

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
도움이 되었습니까?

해결책

First both stdout(1) and stderr(2) point to your terminal.

You then redirect stderr to whatever your stdout points to. (Which is the terminal.)

Afterwards you redirect stdout to /dev/null. But stderr still points to the terminal.

You can do it the other way around >/dev/null 2>&1: This way you first redirect stdout to /dev/null and then stderr to the same.

Bash provides the shorthand &>/dev/null for this.

다른 팁

Use &>/dev/null to suppress everything.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top