2010-11-06 60 views
13

我不喜欢创建新文件。我想要完成类似的操作:如何比较两个unix命令的输出以找出差异?

cmd1 > a 
cmd2 > b 
cat a b b | sort | uniq -u 

但是不使用文件a和b。

+0

相关:(http://stackoverflow.com/questions/3800202/diff-output-from-two-programs-without-temporary-files),[如何I DIFF [从两个程序,而无需临时文件DIFF输出]两个命令的输出?](http://askubuntu.com/questions/229447/how-do-i-diff-the-output-of-two-commands) – kenorb 2014-06-12 13:19:44

回答

28

Unix实用程序通常是面向文件的,所以没有什么比您想要的要好。

然而,zsh中可以自动创建临时文件的语法如下:

diff =(cmd1) =(cmd2)

它也可以创建临时的命名管道(或使用特殊文件/dev/fdn引用匿名管道)与

diff <(cmd1) <(cmd2)

但是,许多diff在其输入上调用lseek(),因此不能使用命名管道。

diff是一般更为有用的命令非常类似上面的输出比较比你的管道。)

参见“zshexpn”手册页的“进程替换”一节的更多细节。

+8

的'<(CMD)'语法是一个相当标准的还有更多广泛使用的shell,如bash。我以前在diff中使用过这个,没有注意到任何问题。 – Porculus 2010-11-06 23:08:11

+0

而且,当然,这不仅仅是用'diff'来表示。我也将它用于'vimdiff'和其他工具。 – DerMike 2015-01-15 10:11:43