我正在使用一个命令行实用程序,该实用程序需要传递文件名以将输出写入,例如
foo -o output.txt
它向 stdout
写入的唯一内容是一条表明它运行成功的消息。我希望能够将写入 output.txt
的所有内容通过管道传输到另一个命令行实用程序。我的动机是 output.txt 最终将成为一个我不需要保留的 40 GB 文件,我宁愿通过管道传输流而不是逐步处理大量文件。
在这种情况下,有什么方法可以将实际输出(即 output.txt
)通过管道传输到另一个命令?我可以以某种方式神奇地将 stdout
作为文件参数传递吗?
最佳答案
最方便的方法是使用进程替换。在 bash 中,语法如下所示:
foo -o >(other_command)
(请注意,这是一个 bashism 。其他 shell 也有类似的解决方案,但最重要的是它不可移植。)
您可以按如下方式显式/手动执行上述操作:
使用 mkfifo
命令创建命名管道。
mkfifo my_buf
使用该文件作为输入启动其他命令
other_command < my_buf
执行 foo
并将其输出写入 my_buf
foo -o my_buf
/dev/stdout
你也可以使用设备文件/dev/stdout
如下
foo -o /dev/stdout | other_command
https://stackoverflow.com/questions/7756609/