回显stderr并将stderr输出到文件

问题描述 投票:0回答:2

我试图同时将输出回显到stderr并将stderr重定向到文件,我注意到重定向的顺序很重要,但是我不明白为什么必须采用这种方式。

使用以下任一命令,文件asap为空:

echo "Fatal error." >&2 2>asap
echo >&2 "Fatal error." 2>asap

但是这可行,将“致命错误”记录到文件asap

echo "Fatal error." 2>asap >&2

为什么?

bash redirect stderr
2个回答
2
投票

请参阅How to pipe stderr and not stdout以获取大多数必需的信息。特别要注意'au contraire'注释。请记住,所有重定向都在执行命令之前完成,并且重定向是从左到右处理的。 (管线稍微使故事复杂化。大多数时候,标准输出的管道重定向在进行任何其他重定向之前就完成了。例外是Bash特定的语法|&。有关详细信息,请阅读Bashmanual-和然后不要使用|&。)

注意,重定向可以相对于命令名和参数位于命令行的任何位置。那是:

<html> xml some -command

与]相同>

some -command <html >xml

依此类推。因此,问题中的前两个命令没有区别。 (而且我认为您是自己发现的。)

第一个命令:

echo "Fatal error." >&2 2>asap

首先将标准输出重定向到当前标准错误,然后将标准错误重定向到文件(使标准输出指向原始标准错误),然后执行echo命令。该消息转到原始标准错误(您的终端),而不是文件,因为echo不写入标准错误。

最后一条命令:

echo "Fatal error." 2>asap >&2

首先将标准错误发送到文件,然后将标准输出发送到标准错误将要到达的位置(文件),然后执行echo命令。由于标准输出将发送到文件,因此终端上看不到任何内容。


2
投票

重定向从左到右发生,因此它们可以根据放置而有所不同。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.