entr вместо watch: перезапуск по изменению файлов
Короткая заметка. Годами для «пересобрать при изменении» я писал циклы с sleep или держал
watch -n1. Оказалось, есть entr: маленькая утилита, которая делает ровно это.
Примеры
Прогонять тесты при изменении любого .py-файла:
find . -name '*.py' | entr -c pytest -q
Перезапускать сервер разработки (флаг -r убивает и перезапускает долгоживущий процесс):
ls *.go | entr -r go run .
Проверять конфиг nginx при каждом сохранении:
echo /etc/nginx/nginx.conf | entr -p sudo nginx -t
Нюанс с новыми файлами
entr следит только за файлами из списка на входе. Чтобы подхватывать новые, есть флаг -d:
entr завершится, когда в каталоге появится файл, и его можно перезапустить в цикле:
while true; do find src -name '*.ts' | entr -d npm run build; done
Ставится из стандартных репозиториев: apt install entr.