使用>设置变量时为/ dev / null

时间:2013-07-18 23:53:55

标签: bash variables null output

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

Using >nul in a variable

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

var=$(/bin/command.out)

如果命令没有产生错误,则没有问题。但如果确实如此,则会将其全部打印到终端。我尝试添加它,但它似乎被忽略了。

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

我已经把所有内容放在引号的右边。我试过像那个人建议的那样做逃脱角色。没有运气。

感谢。

刚才意识到链接是批量的。我正在用bash工作,这很清楚。

2 个答案:

答案 0 :(得分:4)

你需要

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

E.g。

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

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

Linux中有两个输出:

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

正在编写消息的错误输出。

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

答案 1 :(得分: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将只是空的。我认为你想要的是什么