【问题标题】:How can I redirect all output to /dev/null?如何将所有输出重定向到 /dev/null?
【发布时间】:2023-03-06 09:24:01
【问题描述】:

我想在后台运行一个程序 (google-chrome),但阻止它向终端输出任何消息。

我试过这样做:

google-chrome 2>&1 1>/dev/null &

但是,终端仍然没有消息,例如:

[5746:5746:0802/100534:ERROR:object_proxy.cc(532)] 调用方法失败:org.chromium.Mtpd.EnumerateStorag...

我做错了什么?如何将所有输出重定向到/dev/null

【问题讨论】:

    标签: bash pipe output-redirect dev-null


    【解决方案1】:

    重定向部分,Bash 的参考手册说:

    运算符 [n]>&word 用于 [...] 复制输出文件描述符

    要将标准错误和标准输出重定向到file,您应该使用表单

    &>file
    

    关于你的情况,这意味着替代

    2>&1 1>/dev/null
    

    &>/dev/null
    

    【讨论】:

    • >/dev/null 2>&1 可能比&>/dev/null 更便携?
    • @Campa 便携式在这里是什么意思?使用 & 的重定向在某些环境中不起作用?如果是,在什么情况下它不起作用?编辑:在这里找到我的答案:unix.stackexchange.com/a/434431/325410
    • 是的,正是 Nick,&> 是 bash 行话,在其他 shell 中将/可能无法工作。
    【解决方案2】:

    好像语法不一样:

    ./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
    

    【讨论】:

      【解决方案3】:

      重定向运算符是从左到右计算的。你错误地把2>&1放在了前面,它把2指向同一个地方,因为1当前指向的是本地终端屏幕,因为你还没有重定向1。您需要执行以下任一操作:

      2>/dev/null 1>/dev/null google-chrome &
      

      或者

      2>/dev/null 1>&2 google-chrome &
      

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

      【讨论】:

      • 感谢您的按位表示法:D
      • 你为什么使用尾随&
      • 因为 OP 说他们想在后台运行命令
      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 2019-10-11
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 2012-08-15
      相关资源
      最近更新 更多