从两个程序的差异输出没有临时文件

说我有太多的程序ab ,我可以运行./a./b

没有先写入临时文件,是否可以区分输出?

使用<(command)将一个命令的输出传递给另一个程序,就好像它是一个文件名。 Bash将程序的输出pipe道输出到pipe道,并将文件名称/dev/fd/63传递给外部命令。

 diff <(./a) <(./b) 

同样的,如果你想把某些东西传递给一个命令,你可以使用>(command)

这在Bash的man页面中被称为“进程replace”。

添加到这两个答案,如果你想看到一个并排的比较,使用vimdiff

 vimdiff <(./a) <(./b) 

像这样的东西:

在这里输入图像说明

一种select是使用命名pipe道(FIFO) :

 mkfifo a_fifo b_fifo ./a > a_fifo & ./b > b_fifo & diff a_fifo b_fifo 

…但是约翰·库格曼的解决scheme更清洁。

给已经很好的答案增加一点(帮助我!):

命令docker输出它的帮助STD_ERR (即文件描述符2)

我想看看docker attachdocker attach --help给出了相同的输出

$ docker attach

$ docker attach --help

刚刚键入这两个命令,我做了以下几点:

$ diff <(!-2 2>&1) <(!! 2>&1)

! 与!-1相同,这意味着在这个之前运行命令1 – 最后一个命令

-2表示在此之前运行命令2

2>&1表示将file_descriptor 2输出(STD_ERR)发送到file_descriptor 1输出(STD_OUT)的相同位置

希望这有一些用处。

对于任何好奇的人来说,这就是你如何在使用鱼壳时执行过程replace:

击:

 diff <(./a) <(./b) 

鱼:

 diff (./a | psub) (./b | psub) 

听起来你现在不能走另一个。