标题有点令人困惑,因为这可能是一个XY问题。
我知道2&>1
会将程序的stderr重定向到stdout。
这是我的问题。我正在尝试这样做:
popen("echo Y > /sys/class/.../somefile.txt", "r")
检测命令是否失败。如果我在stderr上看到以下内容,我知道命令是否从CLI失败:
-sh: echo: write error: Device or resource busy
但是,无论我尝试什么,我都无法捕捉到这个输出。
如果我popen("echo Y > /sys/class/.../somefile.txt 2&>1", "r")
,它只是将原始的echo语句的stderr重定向到stdout,而不是重定向操作的stderr。在这种情况下,如何检测命令是否失败?我也尝试检查pclose
的返回代码,但似乎也没有改变(总是0
)。
答案 0 :(得分:4)
重定向顺序非常重要。正如您所写,订单是:
somefile.txt
。你想要的是:
somefile.txt
。所以使用:
popen("cmd 2>&1 >somefile.txt", "r")
答案 1 :(得分:-1)
我不太确定这是否能满足您的需求,但您可以使用&>
将stdout和stderr重定向到某些内容