2

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

在变量中使用 >nul

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

var=$(/bin/command.out)

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

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

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

谢谢。

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

4

2 回答 2

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 脚本指南”的以下章节中找到更多详细信息:
第 20 章I/O 重定向

于 2013-07-19T00:05:07.083 回答
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 将只是空的。我认为这是你想要的

于 2013-07-19T00:06:45.870 回答