【发布时间】:2016-09-04 02:22:28
【问题描述】:
我注意到,当尝试将命令的输出捕获到 bash 变量时,一些行根本没有被捕获,尽管在变量分配未完成时它们会打印在终端上。一个例子是ssh-keyscan,当横幅消息被启用时。另一个例子是来自 Python SimpleHTTPServer 的访问日志。
这些如何打印在终端上但没有捕获到变量中?
【问题讨论】:
-
因为它们不是发送到
stdout,而是发送到stderr。参见例如ls laajalkdjlajfk和echo "hello"。前者写信给stderr,而后者写给stdout。 -
这是有道理的。虽然,在 Python HTTP 服务器的情况下,即使我将 2>&1 重定向到 /dev/null 请求日志也会显示在终端中。
-
我明白了。您应该详细说明您在何处以及如何使用它,以便我们充分理解您的问题。
-
标准输出和标准错误不是唯一可能的文件描述符。但是,您更有可能写了类似
2>&1 > /dev/null而不是> /dev/null 2>&1之类的东西,这将两者都指向/dev/null。 -
OUTPUT=$({ ERROR=$(cmd.sh 2>&1 1>&$TMP_FD); } {TMP_FD}>&1) 这将在不同的变量中捕获标准错误和标准输出,并让你看到状态
标签: bash