我正在使用一个命令行实用程序,该实用程序需要传递文件名以将输出写入,例如
foo -o output.txt
它唯一写入的东西stdout
是一条消息,表明它运行成功。我希望能够通过管道传输写入的所有内容output.txt
到另一个命令行实用程序。我的动机是,output.txt 最终将成为一个我不需要保留的 40 GB 文件,我宁愿通过管道传输流,也不愿逐步处理大量文件。
在这种情况下有没有办法通过管道传输实际输出(即output.txt
)到另一个命令?我能以某种方式神奇地通过吗stdout
作为文件参数?
解决方案1:使用过程替代 https://en.wikipedia.org/wiki/Process_substitution
最方便的方法是使用进程替换。在 bash 中,语法如下所示:
foo -o >(other_command)
(请注意,这是一个bashism https://askubuntu.com/q/1059265/18623。对于其他 shell 也有类似的解决方案,但底线是它不可移植。)
解决方案 2:使用命名管道 http://en.wikipedia.org/wiki/Named_pipe明确地
您可以显式/手动执行上述操作,如下所示:
-
使用以下命令创建命名管道mkfifo
命令。
mkfifo my_buf
-
使用该文件作为输入启动其他命令
other_command < my_buf
-
Execute foo
并让它将输出写入my_buf
foo -o my_buf
解决方案 3:使用/dev/stdout
您还可以使用设备文件/dev/stdout
如下
foo -o /dev/stdout | other_command
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)