简体   繁体   中英

How do I suppress output from this Shell command

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.

使用&>/dev/null来压缩所有内容。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM