Добрый вечер, здрасти. За чо купил, за то и продаю.
На повестке — direnv.
Эт полезная хуёвина для расширения оболочки. И она достаточно известна среди населения в загнивающем западе.
Позволяет загружать и выгружать переменные среды в зависимости от каталога.
Грубо говоря — позволяет не засирать .profile всяким дерьмом.
Работает так: перед каждым запуском оно проверяет наличие файла (.envrc или .env) в текущем или родительском каталоге.
Если такой файл существует, то он загружается в подоболочку bash. И все экспортируемые переменные становятся доступны для текущей оболочки.
Работает с большой четверкой: bash, zsh, fish, tcsh
Что интересно, direnv это бинарник на golang, что уже подразумевает скорость и все плюхи связанные с этим.
Для убунты ставится так: apt install direnv
Как воткнуть это в другое место, подробно написано тут ну или спроси у медведя.
Подключаем так, добавляем в ~/.bashrc:
eval "$(direnv hook bash)"
Для других шелов смотрим тут.
Не забываем перечитать файл ~/.bashrc чтобы изменения вступили в силу.
Так, поставили, молодцы! Проверяем чо получилось:
cd /tmp
mkdir my-project
echo ${FOO-bashdays}
На экран выдалось: bashdays
Переменная среды FOO не вывелась, логично, дальше:
echo export FOO=foo > .envrc
Ёпта, ошибка — direnv: error /tmp/my-project/.envrc is blocked. Run direnv allow to approve its content.
Сработала защита от дурака, которая запретила нам использовать .envrc. Хе, ща пофиксим!
direnv allow .
Во! Лепота!
direnv: loading /tmp/my-project/.envrc
direnv: export +FOO
Повторяем первую команду:
echo ${FOO-bashdays}
Хуяк и получаем: foo
Что и требовалось доказать, direnv отлично справилась с поставленной задачей.
Теперь выходим из проекта и смотрим:
cd ..
direnv: unloading
echo ${FOO-bashdays}
Ииии барабанная дробь, у нас вывелось — bashdays!
Какая же красота и любовь с первого взгляда!
Рекомендую! Однозначно забираем себе в копилку и внедряем в свой воркфлоу, по крайней мере для всяких лабораторных испытаний эта штука подходит идеально.
Проект на гитхабе: https://github.com/direnv/direnv
Star 12.6k








Комментарии