从两个程序的差异输出没有临时文件
说我有太多的程序a
和b
,我可以运行./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 attach
和docker 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)
听起来你现在不能走另一个。