Bash 如何将stderr重定向到stdout,反之亦然
我正在从bash脚本调用第三方二进制可执行文件,但出于某种奇怪的原因,可执行文件将其信息消息写入Bash 如何将stderr重定向到stdout,反之亦然,bash,Bash,我正在从bash脚本调用第三方二进制可执行文件,但出于某种奇怪的原因,可执行文件将其信息消息写入stderr,将其错误消息写入stdout。(我想这是一个bug…) 调用可执行文件时,如何反转此行为 我试过了 callExecutable 1>&2 2>&1 但这似乎会将所有输出重定向到stderr,而不会将任何输出重定向到stdout。 我可能需要一个中间步骤?将输出视为属于框(流),如果执行2>&1,则输出2将与输出1位于同一框中,因此当执行1>&2时,所有内
stderr
,将其错误消息写入stdout
。(我想这是一个bug…)
调用可执行文件时,如何反转此行为
我试过了
callExecutable 1>&2 2>&1
但这似乎会将所有输出重定向到stderr
,而不会将任何输出重定向到stdout
。
我可能需要一个中间步骤?将输出视为属于框(流),如果执行
2>&1
,则输出2
将与输出1
位于同一框中,因此当执行1>&2
时,所有内容都返回到错误流
解决方法是使用另一个文件描述符。序列
3>&2>&1>&3
符合您的要求。您可以使用另一个文件描述符交换stderr
和stdout
:
callExecutable 3>&1 1>&2 2>&3
将其视为在编程中使用临时变量交换两个其他变量:
temp = x
x = y
y = temp
这里有一个非常有用的站点,详细介绍了一些重定向。您需要三个重定向,而不是两个,使用另一个文件描述符作为“临时变量”
这使
- FD 3至FD 1的当前目的地(stdout)
- FD 1到FD 2的当前目的地(stderr)
- FD 2到FD 3的当前目标(由于第一次重定向,现在是标准输出)
callExecutable 3>&1 1>&2 2>&3