Многие хотя бы раз пытались сделать что-то вроде:
$ sort users.txt > users.txt
И получали пустой файл.
Проблема в том, что shell открывает файл на запись ещё до запуска
sort, поэтому содержимое уничтожается раньше, чем команда успевает его прочитать.Для таких случаев существует
sponge из пакета moreutils:$ sort users.txt | sponge users.txt
Сначала
sponge полностью считывает входной поток в память, а затем открывает файл и записывает результат.Точно так же можно фильтровать логи или конфигурации без временных файлов:
$ grep -v debug app.log | sponge app.log
Или выполнять цепочки преобразований над одним и тем же файлом:
$ sed 's/localhost/db.local/' config.ini | sponge config.ini
🔥 Это позволяет безопасно изменять файл, не создавая временные копии и не рискуя случайно потерять данные.
🚪 Linux Ready | #совет
