我从bash脚本调用第三方二进制可执行文件,但由于某些奇怪的原因,可执行文件将其信息消息写入stderr
并将其错误消息写入stdout
。 (我想这是一个错误...)
如何在调用可执行文件时反转此行为?
我试过
callExecutable 1>&2 2>&1
但这似乎会将所有输出重定向到stderr
,而将所有输出重定向到stdout
。
我可能需要一个中间步骤?
答案 0 :(得分:4)
您可以使用其他文件描述符交换stderr
和stdout
:
callExecutable 3>&1 1>&2 2>&3
可以把它想象成使用temp变量在编程中交换其他两个变量:
temp = x
x = y
y = temp
这是一个非常有用的网站,详细介绍了一些bash one-liners。
答案 1 :(得分:2)
你需要三个重定向而不是两个,使用另一个文件描述符作为“临时变量”
callExecutable 3>&1 1>&2 2>&3
发送
答案 2 :(得分:1)
将输出视为属于框(流),如果您执行2>&1
,则输出2
将与输出1
位于同一框中,因此当您执行{{1}时一切都回到了错误流。
解决方法是使用另一个文件描述符。序列1>&2
完成了您的要求。