重定向(重定向的标准错误)到标准输出

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 重定向到某个地方

重定向的顺序很重要。如您所写,顺序为:

  1. 将标准输出重定向到 somefile.txt
  2. 将 stderr 重定向到现在的任何 stdout。

你想要的是:

  1. 将 stderr 重定向到原始 stdout。
  2. 将标准输出重定向到 somefile.txt

所以使用:

popen("cmd 2>&1 >somefile.txt", "r")