如何将所有输出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
用于复制输出文件描述符
要将stderr
和stdout
redirect到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