我使用的工具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"