82

我想运行一个程序(谷歌-谷歌)但防止它向终端输出任何消息。

我试着这样做:

谷歌-谷歌2>&1 1>/dev/null&

然而,终端仍然充满,没有消息,如:

[5746:5746:0802/100534:错误:object_proxy.cc(532)]无法调用方法:org.chromium。百万吨/日。EnumerateStorag。。。

我做错了什么?如何重定向全部的输出到/开发/空?

3个答案

重置为默认值
90

重定向操作符从左到右求值。你放错了2>&1首先,哪一点2去同一个地方1当前指向的是本地终端屏幕,因为您尚未重定向1然而。您需要执行以下任一操作:

2> /dev/null 1>/dev/nurl谷歌-谷歌&

或者

2> /dev/null 1>&2谷歌主页&

重定向运算符相对于命令的位置无关紧要。您可以将它们放在命令之前或之后。

2
  • 为什么要使用尾随&?
    – 韭菜
    评论 2018年4月9日0:15
  • 2
    因为OP说他们想在后台运行命令 评论 2018年4月9日3:56
53

在该部分中重定向,Bash的参考手册中写道:

操作员[n] >单词(&W)使用[…]复制输出文件描述符

将标准错误和标准输出重定向到文件你应该使用表格

&>文件

关于你的情况,那意味着换一个

2> &1 1>/dev/null

具有

&>/开发/空
  • 11
    >/偏差/空值2>&1可能比&>/开发/空?
    – 坎帕
    评论 2015年7月30日7:53
  • @Campa便携式在这里意味着什么?使用&的重定向在某些环境中不起作用吗?如果是,在什么情况下不起作用?编辑:在此处找到我的答案:unix.stackexchange.com/a/434431/325410 评论 2020年9月17日10:15
  • 1
    是的,就是尼克,&>是bash的行话,在其他shell中可能不起作用。
    – 坎帕
    评论 2020年9月21日12:02

语法似乎不同:

./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`命令PID用户FD类型设备尺寸/关闭节点名称a.输出21181 xxxxxxxxxxxxx 0u CHR 136,43 0t0 46/dev/pts/43a.输出21181 xxxxxxxxxxxxxxx 1w CHR 1,3 0t0 3685/dev/nulla.out 21181 xxxxxxxxxxxxx 2w CHR 1,3 0t0 3685/dev/空

2) FD=2点指向/dev/pts/43

>./a.out 2>&1 1>/dev/null&[1] 25955>lsof-p`pidof a.out`命令PID用户FD类型设备尺寸/关闭节点名称a.out 25955-xxxxxxxxxxxxx 0u CHR 136,43 0t0 46/dev/pts/43a.out 25955 xxxxxxxxxxxxx 1w CHR 1,3 0t0 3685/dev/nulla.out 25955 xxxxxxxxxxxxx 2u CHR 136,43 0t0 46/dev/pts/43

您的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.