Diff вывод из двух программ без временных файлов

Скажем, у меня есть программы a и b, которые можно запускать с помощью ./a и ./b.

Можно ли различать свои выходы без предварительной записи во временные файлы?

4b9b3361

Используйте <(command), чтобы передать один вывод команды в другую программу, как если бы это было имя файла. Bash выводит вывод программы в канал и передает внешнюю команду имя файла, например /dev/fd/63.

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

Аналогичным образом вы можете использовать >(command), если хотите передать что-то в команду.

Это называется "Замена процесса" на странице Bash man.

166
ответ дан 27 сент. '10 в 2:06
источник

Добавляя оба ответа, если вы хотите увидеть сравнение бок о бок, используйте vimdiff:

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

Что-то вроде этого:

enter image description here

22
ответ дан 26 марта '14 в 3:23
источник

Любому любопытно, как вы выполняете замещение процесса при использовании Fish shell:

Bash:

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

Рыба:

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

Похоже, вы не можете сейчас переходить к другому.

7
ответ дан 21 янв. '16 в 22:41
источник

Добавление немного больше к уже хорошим ответам (помогло мне!):

Команда 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)

Надеюсь, что это было полезно.

6
ответ дан 27 апр. '15 в 18:54
источник