我想在后台运行一个程序(google-chrome),但是阻止它向终端输出任何消息。
我试过这样做:
google-chrome 2>&1 1>/dev/null &
然而,终端仍然没有消息,如:
[5746:5746:0802/100534:错误:object_proxy.cc(532)]无法调用方法:org.chromium.Mtpd.EnumerateStorag ...
我做错了什么?如何将所有输出重定向到/dev/null
?
答案 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
用于复制输出文件描述符
要将stderr
和stdout
重定向到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 &
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