【问题标题】:Stdout to both pipe and console?标准输出到管道和控制台?
【发布时间】:2015-12-11 20:24:33
【问题描述】:

有没有办法同时输出到标准输出和另一个进程的标准输入?也就是中间的stdout在到达其他进程的管道之前就输出了吗?

我知道tee 命令可让您写入文件和标准输出,但我不希望这里涉及任何文件。

【问题讨论】:

  • tee 正在写入标准输出,将由下一个| 的标准输入读取。还是我误解了你的问题?
  • @shellter - 对。我希望它进入管道和旧标准输出(即控制台显示)

标签: unix pipe stdout tee


【解决方案1】:

我猜这有点“hacky”,但您可以将tee 的输出重定向到stderr。由于大多数程序从stdin 获取输入,重定向到stderr 将保留原始输出,同时仍通过管道传递到下一个进程。

例如,

cat file.txt | tee >&2 | wc -l

会输出file.txt的全部内容,然后只输出file.txt的行数(wc -l)。

显然,这仅在 stderr 输出到您想要的位置(如终端/控制台)时才有效。

不是一个理想的解决方案,因为它涉及使用stderr 来处理它不一定适用但它有效的东西。

【讨论】:

  • 感谢您的提示!我找到了另一种解决方案(只需编写一个程序来做......),但这对以后来这里的人很有用。