Wyszukiwanie w witrynie

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.