所以我找到了这个答案,但它对我不起作用。找不到其他任何东西。
我正在尝试做的是在设置这样的变量时阻止输出。
var=$(/bin/command.out)
如果命令没有产生错误,则没有问题。但如果确实如此,则会将其全部打印到终端。我尝试添加它,但它似乎被忽略了。
var=$(/bin/command.out) > /dev/null
我已经把所有内容放在引号的右边。我试过像那个人建议的那样做逃脱角色。没有运气。
感谢。
刚才意识到链接是批量的。我正在用bash工作,这很清楚。
答案 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将只是空的。我认为你想要的是什么