我想在后台运行一个程序(google-chrome
),但阻止它向终端输出任何消息。
我试过这样做:
google-chrome 2>&1 1>/dev/null &
但是,终端仍然会填满,而不会出现如下消息:
5746:5746:0802/100534:ERROR:object_proxy.cc(532)
无法调用方法: org.chromium.Mtpd.EnumerateStorag...
我做错了什么?如何将所有输出重定向到/dev/null
发布于 2013-08-03 03:38:25
重定向运算符是从左到右计算的。您错误地将2>&1
放在第一位,这会将2
指向与1
当前所指向的本地终端屏幕相同的位置,因为您还没有重定向1
。您需要执行以下任一操作:
2>/dev/null 1>/dev/null google-chrome &
或
2>/dev/null 1>&2 google-chrome &
重定向操作符相对于命令的位置并不重要。您可以将它们放在命令之前或之后。
发布于 2013-08-02 17:19:01
在重定向一节中,Bash的参考手册中写道:
使用运算符[n]>&word
...复制输出文件描述符
要将标准错误和标准输出都重定向到file
,您应该使用
&>file
就你的情况而言,这意味着替换
2>&1 1>/dev/null
使用
&>/dev/null
发布于 2013-08-02 17:19:09
似乎语法是不同的:
./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
https://stackoverflow.com/questions/18012930
复制相似问题