【问题标题】:redirect bash output and error for all commands重定向所有命令的 bash 输出和错误
【发布时间】:2013-05-17 18:14:57
【问题描述】:

如何将 bash 上执行的所有命令重定向到 /dev/null ?

很明显,对于一个命令我们必须做的:

command > /dev/null  2>&1

接下来要执行的所有命令怎么样?

【问题讨论】:

    标签: linux bash output dev-null


    【解决方案1】:

    只需启动一个新的 shell:

    bash >/dev/null 2>&1
    

    现在您可以输入命令 blind :) 如果您想离开该模式,请输入:exit

    但是盲目地输入命令通常不会是你想要的。所以我建议创建一个像script.sh 这样的文本文件,把你的命令放在里面:

    command1 foo 
    command2 bar
    

    然后使用以下命令执行它:

    bash script.sh >/dev/null 2>&1
    

    该脚本中所有命令的输出现在将被重定向到 /dev/null

    【讨论】:

    • 我得到了这个:[1] 13407 bash: 2: 没有这样的文件或目录 1: 找不到命令 [1]+ Exit 127 bash 2 > /dev/null
    • 尝试使用/usr/bin/bash 而不是bash。顺便说一句,您使用的是哪个系统?
    • 是的,我有,但他不认识 2 和 1
    • 自己输入,不要粘贴复制
    • 是的,它奏效了。但是如果我只想重定向错误输出?
    【解决方案2】:

    在没有命令的情况下使用exec

    exec > /dev/null 2>&1
    

    正如 hex2mgl 所指出的,如果您在交互式 shell 中执行此操作,您甚至不会再看到您的提示,因为 shell 会将其打印到标准错误中。我认为这是针对脚本的,因为忽略交互式运行的命令的所有输出没有多大意义:)

    【讨论】:

    • 没有被屏蔽;所有输出(包括您的提示的标准输出和标准错误)都已按要求重定向到/dev/null
    • exec 2>/dev/null。但这仍会将您的输入和提示重定向到/dev/null/。
    【解决方案3】:

    对于脚本或其他实际用途,将命令分组是一个不错的解决方案。检查http://www.gnu.org/software/bash/manual/html_node/Compound-Commands.html它具体说Any redirections (see Redirections) associated with a compound command apply to all commands within that compound command unless explicitly overridden.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 2015-06-02
      相关资源
      最近更新 更多