如何将所有输出redirect到/ dev / null?

我想在后台运行一个程序(谷歌浏览器),但是阻止它向terminal输出任何消息。

我试过这样做:

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

但是,terminal仍然填满没有消息,如:

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

我究竟做错了什么? 如何将所有输出redirect到/dev/null

redirect操作符从左到右进行评估。 你做错了什么是把2>&1第一,其中2指向同一地方1当前指向哪个是本地terminal屏幕,因为你还没有redirect1 。 你需要做的是以下任一项:

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

要么

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

redirect操作符与命令的关系并不重要。 你可以把它们放在命令之前或之后。

Redirection bash的参考手册一节中说:

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

要将stderrstdoutredirect到file您应该使用表单

 &>file 

关于你的情况,这意味着替代

 2>&1 1>/dev/null 

 &>/dev/null 

看起来语法是不同的:

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

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

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