首页 > 解决方案 > 重定向(重定向的标准错误)到标准输出

问题描述

标题有点混乱,因为这可能是一个 XY 问题。

我知道这2&>1会将程序的标准错误重定向到标准输出。

这是我的问题。我正在尝试这样做:

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 语句的标准错误重定向到标准输出,而不是重定向操作的标准错误。在这种情况下,如何检测命令是否失败?我也尝试检查返回代码,pclose但这似乎也没有改变(总是0)。

标签: cshpopen

解决方案


重定向的顺序很重要。正如你所写,顺序是:

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

你想要的是:

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

所以使用:

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

推荐阅读