重定向(重定向的标准错误)到标准输出
Redirect (stderr of redirect) to stdout
标题有点混乱,因为这可能是一个 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
的 return 代码,但这似乎也没有改变(总是 0
)。
我不太确定这是否能满足您的需求,但您可以使用 &>
将 stdout 和 stderr 重定向到某个地方
重定向的顺序很重要。如您所写,顺序为:
- 将标准输出重定向到
somefile.txt
。
- 将 stderr 重定向到现在的任何 stdout。
你想要的是:
- 将 stderr 重定向到原始 stdout。
- 将标准输出重定向到
somefile.txt
。
所以使用:
popen("cmd 2>&1 >somefile.txt", "r")
标题有点混乱,因为这可能是一个 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
的 return 代码,但这似乎也没有改变(总是 0
)。
我不太确定这是否能满足您的需求,但您可以使用 &>
将 stdout 和 stderr 重定向到某个地方
重定向的顺序很重要。如您所写,顺序为:
- 将标准输出重定向到
somefile.txt
。 - 将 stderr 重定向到现在的任何 stdout。
你想要的是:
- 将 stderr 重定向到原始 stdout。
- 将标准输出重定向到
somefile.txt
。
所以使用:
popen("cmd 2>&1 >somefile.txt", "r")