На повестке —
direnv.Эт полезная хуёвина для расширения оболочки. И она достаточно известна среди населения в загнивающем западе.
ㅤ
Позволяет загружать и выгружать переменные среды в зависимости от каталога.
Грубо говоря — позволяет не засирать
.profile всяким дерьмом.Работает так: перед каждым запуском оно проверяет наличие файла (
.envrc или .env) в текущем или родительском каталоге.Если такой файл существует, то он загружается в подоболочку bash. И все экспортируемые переменные становятся доступны для текущей оболочки.
Работает с большой четверкой: bash, zsh, fish, tcsh
Суть — используем переменные среды для конкретного проекта, не трогая при этом ~/.profile.
Что интересно,
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
tags: #bash #linux
—
🔔 @bashdays➡️ @gitgate