Добрый вечер, здрасти. За чо купил, за то и продаю.

На повестке — direnv.

Эт полезная хуёвина для расширения оболочки. И она достаточно известна среди населения в загнивающем западе.

Позволяет загружать и выгружать переменные среды в зависимости от каталога.

Грубо говоря — позволяет не засирать .profile всяким дерьмом.

Работает так: перед каждым запуском оно проверяет наличие файла (.envrc или .env) в текущем или родительском каталоге.

Если такой файл существует, то он загружается в подоболочку bash. И все экспортируемые переменные становятся доступны для текущей оболочки.

Работает с большой четверкой: bash, zsh, fish, tcsh

Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Суть — используем переменные среды для конкретного проекта, не трогая при этом ~/.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