Joh*_*ica 207
使用<(command)一个命令的输出传递到另一个程序,就好像它是一个文件名.Bash将程序的输出传递给管道,并将文件名传递/dev/fd/63给外部命令.
diff <(./a) <(./b)
Run Code Online (Sandbox Code Playgroud)
类似地,>(command)如果要将某些东西输入命令,则可以使用.
这在Bash的手册页中称为"过程替换".
bro*_*oot 25
添加两个答案,如果要查看并排比较,请使用vimdiff:
vimdiff <(./a) <(./b)
Run Code Online (Sandbox Code Playgroud)
像这样的东西:

mar*_*ton 20
一种选择是使用命名管道(FIFO):
mkfifo a_fifo b_fifo
./a > a_fifo &
./b > b_fifo &
diff a_fifo b_fifo
Run Code Online (Sandbox Code Playgroud)
......但John Kugelman的解决方案更加清晰.
Jam*_*hon 14
对于任何好奇的人,这是使用Fish shell执行进程替换的方法:
击:
diff <(./a) <(./b)
Run Code Online (Sandbox Code Playgroud)
鱼:
diff (./a | psub) (./b | psub)
Run Code Online (Sandbox Code Playgroud)
不幸的是,鱼类的实施目前存在缺陷 ; fish将挂起或使用磁盘上的临时文件.您也不能使用psub来输出命令.
小智 7
为已经很好的答案添加一点(帮助我!):
该命令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)相同的位置
希望这有一些用处.