Direnv — zarządzaj zmiennymi środowiskowymi specyficznymi dla projektu w systemie Linux
direnv to sprytne rozszerzenie typu open source dla powłoki w systemach operacyjnych UNIX, takich jak Linux i macOS. Jest skompilowany do jednego statycznego pliku wykonywalnego i obsługuje powłoki takie jak bash, zsh, tcsh i fish.
Głównym celem direnv jest umożliwienie zmiennych środowiskowych specyficznych dla projektu bez zaśmiecania ~/.profile
lub powiązanych plików startowych powłoki. Implementuje nowy sposób ładowania i rozładowywania zmiennych środowiskowych w zależności od bieżącego katalogu.
Służy do ładowania zmiennych środowiskowych aplikacji 12factor (metodologia tworzenia aplikacji typu oprogramowanie jako usługa), tworzenia izolowanych środowisk programistycznych dla poszczególnych projektów, a także ładowania kluczy tajnych do wdrożenia. Dodatkowo można go używać do tworzenia wielowersyjnych rozwiązań do instalacji i zarządzania, podobnych do rbenv, pyenv i phpenv.
Jak więc działa direnv?
Zanim powłoka załaduje wiersz poleceń, direnv sprawdza, czy w katalogu bieżącym (który można wyświetlić za pomocą polecenia pwd) i nadrzędnym istnieje plik .envrc
. Proces sprawdzania jest szybki i nie można go zauważyć w każdym monitie.
Gdy znajdzie plik .envrc
z odpowiednimi uprawnieniami, ładuje go do podpowłoki bash, przechwytuje wszystkie wyeksportowane zmienne i udostępnia je bieżącej powłoce.
Instalowanie direnv w systemach Linux
W większości dystrybucji Linuksa pakiet direnv jest dostępny do zainstalowania z domyślnych repozytoriów za pomocą menedżera pakietów systemowych, jak pokazano.
sudo apt install direnv #Debian,Ubuntu and Mint
sudo dnf install direnv #Fedora
W innych dystrybucjach, takich jak Red Hat Enterprise Linux (RHEL) i CentOS lub dowolnej dystrybucji obsługującej przyciąganie, możesz zainstalować ją jako pstryknięcie. Wymaga to zainstalowania snapd w twoim systemie.
sudo snap install direnv
Jak podłączyć direnv do powłoki Bash
Po zainstalowaniu direnv musisz podłączyć go do bieżącej powłoki Linuksa. Na przykład dla Bash dodaj następujący wiersz na końcu pliku ~/.bashrc
.
Upewnij się, że pojawia się nawet po rvm, git-prompt i innych rozszerzeniach powłoki, które manipulują monitem.
eval "$(direnv hook bash)"
Dla powłoki ZSH
Dodaj następujący wiersz na końcu pliku ~/.zshrc
:
eval "$(direnv hook zsh)"
Do muszli RYB
Dodaj następujący wiersz na końcu pliku ~/.config/fish/config.fish
:
eval (direnv hook fish)
Następnie zamknij aktywne okno terminala i otwórz nową powłokę lub pobierz plik, jak pokazano.
source ~/.bashrc
source ~/.zshrc
source ~/.config/fish/config.fish
Jak korzystać z direnv w powłoce systemu Linux
Aby zademonstrować działanie direnv, utworzymy nowy katalog o nazwie tecmint_projects
i przeniesiemy się do niego.
mkdir ~/tecmint_projects
cd tecmint_projects/
Następnie utwórzmy w wierszu poleceń nową zmienną o nazwie TEST_VARIABLE
, a po jej wyświetleniu wartość powinna być pusta:
echo $TEST_VARIABLE
Teraz utworzymy nowy plik .envrc
zawierający kod Bash, który zostanie załadowany przez direnv. Próbujemy także dodać do niego wiersz „eksportuj TEST_VARIABLE=tecmint” za pomocą polecenia echo i znaku przekierowania wyjścia (>)
:
echo export TEST_VARIABLE=tecmint > .envrc
Domyślnie mechanizm bezpieczeństwa blokuje ładowanie pliku .envrc
. Ponieważ wiemy, że jest to plik bezpieczny, musimy zatwierdzić jego zawartość, uruchamiając następującą komendę:
direnv allow .
Teraz, gdy zawartość pliku .envrc
została już wczytana, sprawdźmy ustawioną wcześniej wartość TEST_VARIABLE
:
echo $TEST_VARIABLE
Kiedy wyjdziemy z katalogu tecmint_project
, direnv zostanie wyładowany i jeśli jeszcze raz sprawdzimy wartość TEST_VARIABLE
, powinna ona być pusta:
cd ..
echo $TEST_VARIABLE
Za każdym razem, gdy przejdziesz do katalogu tecmint_projects, plik .envrc
zostanie załadowany, jak pokazano na poniższym zrzucie ekranu:
cd tecmint_projects/
Aby cofnąć autoryzację danego pliku .envrc
należy użyć komendy deny.
direnv deny . #in current directory
OR
direnv deny /path/to/.envrc
Więcej informacji i instrukcje użytkowania można znaleźć na stronie podręcznika direnv:
man direnv
Dodatkowo direnv korzysta również z biblioteki stdlib (direnv-stdlib) wyposażonej w kilka funkcji, które pozwalają łatwo dodawać nowe katalogi do PATH i zrobić o wiele więcej.
Aby znaleźć dokumentację wszystkich dostępnych funkcji, sprawdź stronę podręcznika direnv-stdlib:
man direnv-stdlib
To wszystko, co dla Ciebie przygotowaliśmy! Jeśli masz jakieś pytania lub przemyślenia, którymi chcesz się z nami podzielić, skorzystaj z poniższego formularza opinii.