2013-07-18 203 views
1

于是我找到这个答案的时候,并没有为我工作用>的/ dev/null的。无法找到其他任何东西。设置变量

Using >nul in a variable

我试图做的是防止输出设置这样的变量时。

var=$(/bin/command.out) 

如果该命令不会产生错误,那就没有问题了。但是,如果这样做,它将全部输出到终端。我试着添加这个,但它似乎被忽略。

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

我已经把所有的东西都放在了引号的右边。我试着做那个人建议的转义字符。没有运气。

谢谢。

刚刚意识到这种联系的批次。我在bash工作就是这么清楚。

回答

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只会是空的。我认为这是你想要的

4

你需要

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

+0

谢谢。这正是我所需要的。 – user2503227