Когда нужно сравнить результат работы двух команд, большинство сразу сохраняет их в файлы:
команда1 > out1.txt
команда2 > out2.txt
diff out1.txt out2.txt
Но Bash позволяет сделать это без лишнего мусора на диске, используя подстановку процессов - конструкцию <(команда).
▪️ Пример: сравнение списков установленных пакетов на двух серверах
diff <(ssh server1 'dpkg -l | sort') <(ssh server2 'dpkg -l | sort')
Bash создаёт два временных именованных канала (FIFO) и подставляет их как файлы. diff "думает", что сравнивает обычные файлы, а на деле - это результат команд.
▪️ Примеры практического применения
📍 Сравнение конфигурации
diff <(curl -s http://server1/config.json) <(curl -s http://server2/config.json)
📍 Проверка различий в ответах веб-приложения (до и после деплоя)
diff <(curl -s https://myapp.com/v1/data) <(curl -s https://myapp.com/v2/data)
📍 Сравнение вывода команд systemd
diff <(systemctl list-units --type=service | grep running) <(cat snapshot.txt)
⚡️ Полезно:
1. Работает не только с diff, но и с comm, cmp, vimdiff и др.
2. Используется только в bash и совместимых шеллах (не POSIX-совместимо).
3. <(...) — это подстановка процесса, создающая временный дескриптор.
🔥 Фишка: можно использовать diff -u для наглядного вывода различий:
diff -u <(sort файл_до.log) <(sort файл_после.log)
BashTex 📱 #bash #utils