Как я могу сравнить вывод двух команд unix, чтобы найти разницу?

Я предпочитаю не создавать новые файлы. Я хочу выполнить нечто похожее на:

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

но без использования файлов a и b.

Ответ 1

Утилиты Unix обычно ориентированы на файлы, поэтому ничего не делает то, что вы хотите.

Однако zsh может автосоздавать временные файлы со следующим синтаксисом:

diff =(cmd1) =(cmd2)

Он также может создавать временные именованные каналы (или использовать специальные файлы /dev/fdn для ссылки на анонимные каналы) с помощью

diff <(cmd1) <(cmd2)

Однако многие diff вызывают lseek() на их входе, поэтому не будут работать с именованными каналами.

(diff, как правило, более полезная команда для сравнения очень похожего вывода, чем ваш конвейер выше.)

Более подробную информацию см. в разделе "Замена процесса" на странице руководства "zshexpn".