Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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
like image 858
cefn Avatar asked Feb 17 '23 10:02

cefn


2 Answers

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.

like image 172
michas Avatar answered Feb 28 '23 13:02

michas


Use &>/dev/null to suppress everything.

like image 23
jaypal singh Avatar answered Feb 28 '23 15:02

jaypal singh