我想google-chrome
在后台运行一个程序 ( ),但阻止它向终端输出任何消息。
我试过这样做:
google-chrome 2>&1 1>/dev/null &
但是,终端仍然没有消息,例如:
[5746:5746:0802/100534:ERROR:object_proxy.cc(532)] 调用方法失败:org.chromium.Mtpd.EnumerateStorag...
我究竟做错了什么?如何将所有输出重定向到/dev/null
?
我想google-chrome
在后台运行一个程序 ( ),但阻止它向终端输出任何消息。
我试过这样做:
google-chrome 2>&1 1>/dev/null &
但是,终端仍然没有消息,例如:
[5746:5746:0802/100534:ERROR:object_proxy.cc(532)] 调用方法失败:org.chromium.Mtpd.EnumerateStorag...
我究竟做错了什么?如何将所有输出重定向到/dev/null
?
重定向运算符从左到右进行评估。你错误地把它放在了2>&1
前面,它指向2
同一个地方,就像1
当前指向的是本地终端屏幕一样,因为你还没有重定向1
。您需要执行以下任一操作:
2>/dev/null 1>/dev/null google-chrome &
或者
2>/dev/null 1>&2 google-chrome &
重定向操作符相对于命令的位置无关紧要。您可以将它们放在命令之前或之后。
在Redirection部分,Bash 的参考手册说:
运算符
[n]>&word
用于 [...] 复制输出文件描述符
要将标准错误和标准输出重定向到file
您应该使用表单
&>file
关于您的情况,这意味着替代
2>&1 1>/dev/null
和
&>/dev/null
似乎语法不同:
./a.out 1>/dev/null 2>&1 &
请参阅 FD = 2 的设备在./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