如何避免在bash shell中运行两个命令时需要创建临时文件?

4

我需要运行两个命令。第一个命令创建一个文件,该文件作为第二个命令的输入参数。可以按以下方式运行:

$ cmd1 p1 p2 > tmp.txt
$ cmd2 -i tmp.txt p3 
< p >在cmd2上使用-i参数需要一个文件名。有没有一种方法可以在不创建tmp.txt文件的情况下在一行中完成这个操作?< /p >
2个回答

11

尝试使用“进程替换”(这是Bash手册的称呼)

cmd2 -i <(cmd1 p1 p2) p3

这个方法也可以反过来使用:

cmd2 -o >(cmd1 p1 p2) p3

是的!谢谢Martijn。这只是bash的功能还是其他shell也支持这种功能? - stand
我认为这个语法可能只适用于Bash。也许像Zsh这样的Shell也支持它。 - Martijn
@stand:这是Bash语法。其他shell可能支持类似的功能。 - Daenyth

-1
cmd1 p1 p2|xargs cmd2 p3 -i

xargs将调用cmd2并将其自身的stdin(即cmd1的输出)转换为cmd2的命令行参数。


OP希望避免创建临时文件,而不是将cmd1的输出用作文件名。 - Carl Norum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接