Поиск по сайту:

Direnv — управление переменными среды проекта в Linux


direnv — это отличное расширение с открытым исходным кодом для вашей оболочки в операционных системах UNIX, таких как Linux и macOS. Он скомпилирован в один статический исполняемый файл и поддерживает такие оболочки, как bash, zsh, tcsh и fish.

Основная цель direnv — разрешить использование переменных среды, специфичных для проекта, не загромождая ~/.profile или связанные файлы запуска оболочки. Он реализует новый способ загрузки и выгрузки переменных среды в зависимости от текущего каталога.

Он используется для загрузки переменных среды 12факторных приложений (методология создания приложений «программное обеспечение как услуга»), создания изолированных сред разработки для каждого проекта, а также загрузки секретов для развертывания. Кроме того, его можно использовать для создания многоверсионных решений по установке и управлению, подобных rbenv, pyenv и phpenv.

Так как же работает direnv?

Прежде чем оболочка загрузит командную строку, direnv проверяет наличие файла .envrc в текущем (который можно отобразить с помощью команды pwd) и родительском каталоге. Процесс проверки быстрый, и его нельзя заметить при каждом запросе.

Как только он находит файл .envrc с соответствующими разрешениями, он загружает его в подоболочку bash, захватывает все экспортированные переменные и делает их доступными для текущей оболочки.

Установка direnv в системах Linux

В большинстве дистрибутивов Linux пакет direnv доступен для установки из репозиториев по умолчанию с помощью системного менеджера пакетов, как показано.

sudo apt install direnv		#Debian,Ubuntu and Mint
sudo dnf install direnv		#Fedora

В других дистрибутивах, таких как Red Hat Enterprise Linux (RHEL) и CentOS или в любом дистрибутиве, поддерживающем Snap, вы можете установить его как >щелкнуть. Для этого в вашей системе должен быть установлен Snapd.

sudo snap install direnv

Как подключить direnv к вашей оболочке Bash

После установки direnv вам необходимо подключить его к текущей оболочке Linux. Например, для Bash добавьте следующую строку в конец файла ~/.bashrc.

Убедитесь, что оно появляется даже после rvm, git-prompt и других расширений оболочки, которые управляют приглашением.

eval "$(direnv hook bash)"

Для оболочки ZSH

Добавьте следующую строку в конец файла ~/.zshrc:

eval "$(direnv hook zsh)" 

Для РЫБНОЙ скорлупы

Добавьте следующую строку в конец файла ~/.config/fish/config.fish:

eval (direnv hook fish)

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

source ~/.bashrc
source  ~/.zshrc 
source ~/.config/fish/config.fish

Как использовать direnv в оболочке Linux

Чтобы продемонстрировать, как работает direnv, мы создадим новый каталог с именем tecmint_projects и перейдем в него.

mkdir ~/tecmint_projects
cd tecmint_projects/

Далее давайте создадим новую переменную с именем TEST_VARIABLE в командной строке, и при ее отображении значение должно быть пустым:

echo $TEST_VARIABLE

Теперь мы создадим новый файл .envrc, содержащий код Bash, который будет загружен с помощью direnv. Мы также пытаемся добавить в него строку «export the TEST_VARIABLE=tecmint» с помощью команды echo и символа перенаправления вывода (>):

echo export TEST_VARIABLE=tecmint > .envrc

По умолчанию механизм безопасности блокирует загрузку файла .envrc. Поскольку мы знаем, что это безопасный файл, нам необходимо утвердить его содержимое, выполнив следующую команду:

direnv allow .

Теперь, когда содержимое файла .envrc разрешено для загрузки, давайте проверим значение TEST_VARIABLE, которое мы установили ранее:

echo $TEST_VARIABLE

Когда мы выйдем из каталога tecmint_project, direnv будет выгружен, и если мы проверим значение TEST_VARIABLE еще раз, оно должно быть пустым:

cd ..
echo $TEST_VARIABLE

Каждый раз, когда вы переходите в каталог tecmint_projects, файл .envrc будет загружаться, как показано на следующем снимке экрана:

cd tecmint_projects/

Чтобы отозвать авторизацию данного .envrc, используйте команду deny.

direnv deny .			#in current directory
OR
direnv deny /path/to/.envrc

Дополнительную информацию и инструкции по использованию см. на странице руководства direnv:

man direnv

Кроме того, direnv также использует stdlib (direnv-stdlib) с несколькими функциями, которые позволяют легко добавлять новые каталоги в ваш PATH и многое другое.

Чтобы найти документацию по всем доступным функциям, посетите страницу ввода руководства direnv-stdlib:

man direnv-stdlib

Это все, что у нас было для вас! Если у вас есть какие-либо вопросы или мысли, которыми вы можете поделиться с нами, воспользуйтесь формой обратной связи ниже.