HeadlinesBriefing HeadlinesBriefing.com

once: выполните команду один раз, повторно используйте вывод

Hacker News •
×

once — это инструмент командной строки, который выполняет команду один раз в текущем каталоге, выводит её stdout и хранит результат в памяти небольшого фонового демона, работающего для каждого пользователя. Повторные вызовы с той же командой, тем же каталогом и тем же ключом арендатора возвращаются из памяти до истечения срока записи. Демон автоматически останавливается, когда истекает срок его последней записи.

Типичный сценарий использования — чтение секретов из 1Password без подтверждения каждого чтения вашим отпечатком пальца. Ключ арендатора, задаваемый один раз для каждого сеанса терминала в ~/.zshrc, позволяет экспортировать токен, например GITHUB_TOKEN, с помощью команды вида `once --ttl 8h --no-dir -- op read op://Private/Git Hub/token`. Первый вызов запрашивает аутентификацию; последующие вызовы в течение восьми часов её не требуют. Тот же подход работает и с mise — глобально или в файле mise.local.toml конкретного проекта.

Для установки требуется Go 1.27 или новее, команда: `go install github.com/alex0ptr/once@latest`. Инструмент не имеет зависимостей, кроме стандартной библиотеки, и работает только в macOS и Linux. Основные команды: `once --ttl DURATION`, `once status` для просмотра демона и количества его записей, `once clear` для удаления всех кэшированных значений и `once help`.

Кэшируется только stdout. Результаты команд, завершившихся с ненулевым кодом возврата, никогда не кэшируются, а код возврата передаётся дальше. По умолчанию рабочий каталог входит в ключ кэша, но --no-dir исключает его, поэтому одно кэшированное значение используется во всех каталогах. Параметр --until задаёт абсолютное время истечения, например 22:00 сегодня или завтра утром, — что наступит раньше вместе с --ttl.

Источник: Hacker News · Сводку подготовил HeadlinesBriefing