-->

How to redirect all output to /dev/null?

2019-03-08 01:59发布

问题:

I want to run a program (google-chrome) in the background, but prevent it from outputting any messages to the terminal.

I tried doing this:

google-chrome 2>&1 1>/dev/null &

However, the terminal still fills up without messages like:

[5746:5746:0802/100534:ERROR:object_proxy.cc(532)] Failed to call method: org.chromium.Mtpd.EnumerateStorag...

What am I doing wrong? How do I redirect all the output to /dev/null?

回答1:

Redirection operators are evaluated left-to-right. what you did wrong was put 2>&1 first, which points 2 to the same place as 1 currently is pointed to which is the local terminal screen because you have not redirected 1 yet. What you need to do is either of the following:

2>/dev/null 1>/dev/null google-chrome &

or

2>/dev/null 1>&2 google-chrome &

The placement of the redirect operators in relation to the command does not matter. You can put them before or after the command.



回答2:

In the section Redirection bash's reference manual says:

The operator [n]>&word is used [...] to duplicate output file descriptors

To redirect both stderr and stdout to file you should use the form

&>file

With regard to your case that means substitute

2>&1 1>/dev/null

with

&>/dev/null


回答3:

It seems that syntax is different:

./a.out 1>/dev/null 2>&1 &

See the devices for FD = 2 are different when ./a.out 1>/dev/null 2>&1 and ./a.out 2>&1 1>/dev/null &

1) FD=2 points to /dev/null

>./a.out 1>/dev/null 2>&1 &
[1] 21181
>lsof -p `pidof a.out`
COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
a.out   21181 xxxxxxxxxxxxxxx    0u   CHR 136,43      0t0        46 /dev/pts/43
a.out   21181 xxxxxxxxxxxxxxx    1w   CHR    1,3      0t0      3685 /dev/null
a.out   21181 xxxxxxxxxxxxxxx    2w   CHR    1,3      0t0      3685 /dev/null

2) FD=2 points to /dev/pts/43

>./a.out 2>&1 1>/dev/null &
[1] 25955
>lsof -p `pidof a.out`
COMMAND   PID            USER   FD   TYPE DEVICE SIZE/OFF      NODE NAME
a.out   25955 xxxxxxxxxxxxxxx    0u   CHR 136,43      0t0        46 /dev/pts/43
a.out   25955 xxxxxxxxxxxxxxx    1w   CHR    1,3      0t0      3685 /dev/null
a.out   25955 xxxxxxxxxxxxxxx    2u   CHR 136,43      0t0        46 /dev/pts/43