![输出到临时文件并通过管道传输到其他进程](https://linux22.com/image/200107/%E8%BE%93%E5%87%BA%E5%88%B0%E4%B8%B4%E6%97%B6%E6%96%87%E4%BB%B6%E5%B9%B6%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E4%BC%A0%E8%BE%93%E5%88%B0%E5%85%B6%E4%BB%96%E8%BF%9B%E7%A8%8B.png)
我使用的工具tool_1
不支持输出到文件stdout
,仅支持输出到文件。我想输出到一个临时文件(当场创建)并将内容通过管道传输到另一个工具tool_2
。这在 bash 中可能吗?
基本上,我想将两个语句组合成一个语句,同时优雅地创建一个临时文件,该文件随后将被清理:
tool_1 ... > output
tool_2 ... < output
答案1
这是可能的,但有一些注意事项,使用流程替代:
tool_1 ... >(tool_2 ...)
指定需要文件名的>(tool_2 ...)
位置。tool_1
进程替换是使用管道以一种或另一种形式实现的,因此它不支持文件支持的所有内容;值得注意的是,无法在生成的“文件”中进行查找。
如果这不合适,请使用临时文件:
file=$(mktemp); tool_1 ... "$file" && < "$file" tool_2 ...; rm "$file"