如何将所有输出重定向到/ dev / null?

时间:2013-08-02 09:07:29

标签: bash pipe output-redirect dev-null

我想在后台运行一个程序(google-chrome),但是阻止它向终端输出任何消息。

我试过这样做:

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

然而,终端仍然没有消息,如:

  

[5746:5746:0802/100534:错误:object_proxy.cc(532)]无法调用方法:org.chromium.Mtpd.EnumerateStorag ...

我做错了什么?如何将所有输出重定向到/dev/null

3 个答案:

答案 0 :(得分:66)

重定向运算符从左到右进行计算。您错误的做法是先放置2>&1,将2指向同一位置,因为当前指向的是1哪个是本地终端屏幕,因为您尚未重定向1然而。您需要做的是以下任一项:

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

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

重定向运算符相对于命令的位置无关紧要。您可以在命令之前或之后放置它们。

答案 1 :(得分:37)

Redirection部分bash的参考手册中说:

  

运算符[n]>&word用于复制输出文件描述符

要将stderrstdout重定向到file,您应该使用表单

&>file

关于你的案件,这意味着替代

2>&1 1>/dev/null

&>/dev/null

答案 2 :(得分:1)

似乎语法不同:

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

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

时,请参阅FD = 2的设备不同

1)FD = 2指向/ 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点/ 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