如何使用多个命令的标准输出作为文件参数

如何使用多个命令的标准输出作为文件参数

我想比较两个命令的输出。

例如:

$ command1 arguments1 > tempfile1
$ command2 arguments2 > tempfile2
$ diff tempfile1 tempfile2 > savefile
$ rm tempfile1 tempfile2

有没有巧妙的方法可以做到这一点?希望只用一行,并且不需要临时文件。

因此,它将会是这样的(但显然不完全是这样的):

$ diff $(command1 arguments1) $(command2 arguments2) > savefile

我的机器信息是:

$ uname -a
Linux host.name 3.2.54 #9 SMP Thu Feb 13 08:17:11 CST 2014 x86_64 GNU/Linux

$ which sh
/bin/sh

答案1

在 bash 中,可以使用进程替换:

diff <(command1 arguments1) <(command2 arguments2) > savefile

请注意,这在普通的 sh 中不起作用(甚至在“posix 模式”下的 bash 中也不起作用,即当以名称“sh”调用时,它会关闭一些功能以实现兼容性)。不过,它在 zsh 中可用。

相关内容