【问题标题】:using > /dev/null when setting a variable设置变量时使用 > /dev/null
【发布时间】:2013-07-18 03:21:16
【问题描述】:

所以我找到了这个答案,但它对我不起作用。找不到其他东西。

Using >nul in a variable

我要做的是在设置这样的变量时阻止输出。

var=$(/bin/command.out)

如果命令没有产生错误,那么就没有问题。但如果是这样,它会将其全部打印到终端。我尝试添加它,但它似乎被忽略了。

var=$(/bin/command.out) > /dev/null

我已经将 = 右侧的所有内容都放在引号中。我试过像那个人建议的那样做逃生角色。没有运气。

谢谢。

刚刚意识到该链接是用于批处理的。我在 bash 中工作,这很清楚。

【问题讨论】:

    标签: bash variables null output


    【解决方案1】:

    你需要

    var=$(/bin/command.out 2> /dev/null)
    

    例如

    $ var=$(not_a_command  2> /dev/null)
    $ echo $var
    
    $(uname  2> /dev/null)
    $ echo $var
    Linux
    

    Linux 中有两个输出:

    • 1>(通常称为STDOUT)这是输出
    • 2>(称为STDERR)这是错误输出。

    这是写入消息的错误输出。

    您可以从“高级 Bash 脚本指南”的以下章节中找到更多详细信息:
    Chapter 20. I/O Redirection

    【讨论】:

      【解决方案2】:

      所以问题很可能是错误正在打印到 STDERR。有两个“通道”可以通过它们向终端发送消息,一个称为 STDOUT,用于大多数一般输出,另一个是 STDERR,保留用于错误和警告。当你写:

      command > /dev/null
      

      您只是告诉它将 STDOUT 定向到 /dev/null。 STDERR 仍将转到终端。如果你想同时抓住两者,你可以这样做:

      command 1> /dev/null 2> /dev/null
      

      与 STDERR 关联的数字是 2,STDOUT 是 1,所以这就是说,将通道 1 上的所有消息重定向到 /dev/null 并且对通道 2 上的所有消息也执行相同操作。通常隐含 1,即当你输入> 时,它会自动重定向STDOUT。

      所以在你的例子中你会想要这样的东西:

      var=$(/bin/command.out 2> /dev/null)
      

      这样,如果您的命令 barfs,barf 将不会被看到,并且 var 将只是空的。我认为这是你想要的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-17
        • 2011-12-29
        • 1970-01-01
        相关资源
        最近更新 更多