【发布时间】:2011-12-07 01:58:34
【问题描述】:
我正在使用一个命令行实用程序,该实用程序需要传递文件名以将输出写入,例如
foo -o output.txt
它向stdout 写入的唯一内容是一条表明它运行成功的消息。我希望能够将写入output.txt 的所有内容通过管道传输到另一个命令行实用程序。我的动机是 output.txt 最终将成为一个我不需要保留的 40 GB 文件,我宁愿通过管道传输流而不是逐步处理大量文件。
在这种情况下,有什么方法可以将实际输出(即output.txt)通过管道传输到另一个命令?我可以以某种方式神奇地将stdout 作为文件参数传递吗?
【问题讨论】:
-
某些版本的unix/linux可以通过
/dev/stdout等访问stdout/err -
unixy 工具通常的“写入标准输出”约定是使用
-作为文件名(即foo -o -)。在您的代码中,您可以简单地检测到该特殊文件名并使用stdout而不是fopened 文件进行输出。在这种情况下不要打印状态,或者将其打印到您可以单独重定向的stderr。 -
所有出色的建议,对问题的不同方面都有深刻的见解。我认为命名管道是要走的路,但是这两个答案本质上是骗人的——我应该将哪个标记为答案?
标签: linux bash file-io stdout pipe