Логотип

Direnv: управление изолированными переменными среды для конкретного проекта в Linux

Direnv: управление изолированными переменными среды для конкретного проекта в Linux

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

Основное преимущество использования direnv заключается в наличии изолированных переменных среды для отдельных проектов. Традиционный метод заключался в добавлении всех переменных среды в файлы запуска одной оболочки, которые могут быть ~/.bashrc~/.zsh, и config.fish в зависимости от вашей оболочки Linux.

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

 

Зачем использовать Direnv?

Разработчики программного обеспечения могут использовать direnv для загрузки переменных среды приложения 12factor (методология создания приложений по принципу «программное обеспечение как услуга»), таких как файлы с секретными данными приложения, для развертывания.

 

Как работает Direnv?

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

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

Читать  xAI объявляет о выпуске модели Grok 2.5 с открытым исходным кодом

 

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

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

# Для Debian, Ubuntu, Mint, PopOS

sudo apt install direnv

 

# Для RedHat, Fedora, CentOS

sudo dnf install direnv

 

# Для Arch, Manjaro, EndeavourOS

yay -Sy direnv

 

В других дистрибутивах, таких как Red Hat или CentOS, вы можете воспользоваться пакетом direnv snaps, как показано ниже.

📝 Примечание
На момент написания этой статьи в Snap Store была доступна устаревшая версия v2.18.2 direnv с некоторыми проблемами. #440

 

sudo snap install direnv

 

Подключите Direnv к вашей текущей оболочке

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

Чтобы узнать, какая оболочка у вас установлена, выполните в терминале следующую команду:

echo $0

bash

 

Воспользуйтесь любым из перечисленных ниже способов в зависимости от вашей текущей оболочки Linux.

 

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

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

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

 

eval "$(direnv hook bash)"

 

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

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

eval "$(direnv hook zsh)"

 

Читать  Как выполнить скрипт Bash в терминале

Для Fish Shell

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

eval (direnv hook fish)

 

Наконец, закройте все активные сеансы терминала и выполните команду source для файлов запуска оболочки, как показано ниже.

# Для оболочки BASH

source ~/.bashrc

 

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

source ~/.zshrc

 

# Для оболочки Fish

source ~/.config/fish/config.fish

 

Как использовать Direnv

Давайте рассмотрим практическое применение direnv. Сначала мы создадим на нашем текущем пути новый каталог для демонстрации под названием ubuntushell_project и перейдём в него.

mkdir ubuntushell_project

cd ubuntushell_project/

 

Давайте проверим, доступна ли переменная $TEST_VARIABLE в текущем пути проекта, с помощью команды echo, как показано ниже.

echo $TEST_VARIABLE

Nope

 

Вместо пробела я заменил его на «nope«, что означает отсутствие глобальной или локальной переменной среды для $TEST_VARIABLE.

Затем мы создадим новый файл в текущем каталоге проекта (указывая ubuntushell_project) с именем .envrc и добавим $TEST_VARIABLE в файл с помощью команды echo, как показано ниже.

echo export TEST_VARIABLE=ubuntushell > .envrc

direnv: загрузка ~/etw/.envrc

direnv: export +TEST_VARIABLE

 

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

direnv allow .

 

Давайте ещё раз проверим вывод $TEST_VARIABLE как показано ниже.

echo $TEST_VARIABLE

ubuntushell

 

Читать  В чем разница между wget и curl?

Тада! Мы успешно создали .envrc файл и загрузили его содержимое в нашу оболочку с помощью команды direnv .

Если вы сделаете шаг назад, чтобы выйти из текущего рабочего каталога (относящегося к ubuntushell_project), и выполните команду echo для $TEST_VARIABLE, то обнаружите, что содержимое пустое.

echo $TEST_VARIABLE

Nope

 

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

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

direnv deny .

 

Удаление Direnv

Предположим, вам не нравится Direnv и вы хотите удалить его из своей системы Linux. Тогда воспользуйтесь приведённой ниже командой, чтобы удалить Direnv из вашей системы.
# Для Debian, Ubuntu, Mint, PopOS

sudo apt purge direnv

# Для RedHat, Fedora, CentOS

sudo dnf remove direnv

# Для Arch, Manjaro, EndeavourOS

yay -Rs direnv

 

Выводы

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Редактор: AndreyEx

Рейтинг: 5 (1 голос)

Важно: Данная статья носит информационный характер. Автор не несёт ответственности за возможные сбои или ошибки, возникшие при использовании описанного программного обеспечения.

Если статья понравилась, то поделитесь ей в социальных сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Загрузка...

Спасибо!

Теперь редакторы в курсе.

Прокрутить страницу до начала