标签:bash linux file-io pipe stdout
我正在使用命令行实用程序,该实用程序需要传递文件名以将输出写入,例如
foo -o output.txt
它写入stdout的唯一内容是一条消息,表明它已成功运行.我希望能够将写入output.txt的所有内容传递给另一个命令行实用程序.我的动机是output.txt将最终成为一个我不需要保留的40 GB文件,而且我宁愿管道流而不是以逐步的方式处理大量文件.
在这种情况下,有没有办法将实际输出(即output.txt)传递给另一个命令?我可以以某种方式神奇地传递stdout作为文件参数吗?
解决方法:
解决方案1:使用process substitution
最方便的方法是使用进程替换.在bash中,语法如下所示:
foo -o >(other_command)
(请注意,这是一个bashism.其他shell有类似的解决方案,但底线是它不可移植.)
解决方案2:明确使用named pipes
您可以如下显式/手动执行上述操作:
>使用mkfifo命令创建命名管道.
mkfifo my_buf
>使用该文件作为输入启动另一个命令
other_command < my_buf
>执行foo并让它将输出写入my_buf
foo -o my_buf
解决方案3:使用/ dev / stdout
您还可以使用设备文件/ dev / stdout,如下所示
foo -o /dev/stdout | other_command
标签:bash,linux,file-io,pipe,stdout 来源: https://codeday.me/bug/20190926/1821338.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。