重定向(重定向的stderr)到stdout

时间:2018-06-14 19:00:37

标签: c sh popen

标题有点令人困惑,因为这可能是一个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)。

2 个答案:

答案 0 :(得分:4)

重定向顺序非常重要。正如您所写,订单是:

  1. 将标准输出重定向到somefile.txt
  2. 将stderr重定向到现在的stdout。
  3. 你想要的是:

    1. 将stderr重定向到原始标准输出。
    2. 将标准输出重定向到somefile.txt
    3. 所以使用:

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

答案 1 :(得分:-1)

我不太确定这是否能满足您的需求,但您可以使用&>将stdout和stderr重定向到某些内容