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