Direnv - Upravljanje varijablama okruženja specifičnim za projekat u Linuxu


direnv je sjajna ekstenzija otvorenog koda za vašu školjku na UNIX operativnom sistemu kao što su Linux i macOS. Kompajliran je u jedan statički izvršni fajl i podržava školjke kao što su bash, zsh, tcsh i fish.

Glavna svrha direnv je da omogući varijable okruženja specifične za projekat bez zatrpavanja ~/.profile ili povezanih datoteka za pokretanje ljuske. Implementira novi način učitavanja i izbacivanja varijabli okruženja ovisno o trenutnom direktoriju.

Koristi se za učitavanje varijabli okruženja aplikacija 12 faktora (metodologija za pravljenje aplikacija softvera kao usluge), kreiranje izolovanih razvojnih okruženja po projektu, kao i za učitavanje tajni za implementaciju. Osim toga, može se koristiti za izgradnju rješenja za instalaciju i upravljanje u više verzija sličnih rbenv, pyenv i phpenv.

Dakle, kako radi direnv?

Prije nego što shell učita komandnu liniju, direnv provjerava postojanje datoteke .envrc u trenutnom (koju možete prikazati pomoću komande pwd) i roditeljskom direktoriju. Proces provjere je brz i ne može se primijetiti na svakom upitu.

Jednom kada pronađe datoteku .envrc sa odgovarajućim dozvolama, učitava je u bash pod-ljusku i hvata sve izvezene varijable i čini ih dostupnim trenutnoj ljusci.

Instaliranje direnv u Linux sistemima

U većini Linux distribucija, paket direnv je dostupan za instalaciju iz zadanih spremišta koristeći vaš sistemski menadžer paketa kao što je prikazano.

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

Na drugim distribucijama kao što su Red Hat Enterprise Linux (RHEL) i CentOS ili bilo koja distribucija koja podržava snaps, možete je instalirati kao snap. Ovo zahtijeva da imate instaliran snapd na vašem sistemu.

sudo snap install direnv

Kako spojiti direnv u svoju Bash Shell

Nakon instalacije direnv, morate ga spojiti na vašu trenutnu Linux shell. Na primjer za Bash, dodajte sljedeći red na kraj datoteke ~/.bashrc.

Pobrinite se da se pojavi čak i nakon rvm, git-prompt i drugih ekstenzija ljuske koje manipuliraju promptom.

eval "$(direnv hook bash)"

Za ZSH Shell

Dodajte sljedeći red na kraj datoteke ~/.zshrc:

eval "$(direnv hook zsh)" 

Za FISH Shell

Dodajte sljedeći red na kraj datoteke ~/.config/fish/config.fish:

eval (direnv hook fish)

Zatim zatvorite prozor aktivnog terminala i otvorite novu ljusku ili izvorni fajl kao što je prikazano.

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

Kako koristiti direnv u Linux Shell-u

Da bismo demonstrirali kako direnv radi, kreirat ćemo novi direktorij pod nazivom tecmint_projects i premjestiti se u njega.

mkdir ~/tecmint_projects
cd tecmint_projects/

Zatim, kreirajmo novu varijablu pod nazivom TEST_VARIABLE u komandnoj liniji i kada se odjekne, vrijednost bi trebala biti prazna:

echo $TEST_VARIABLE

Sada ćemo kreirati novu datoteku .envrc koja sadrži Bash kod koji će učitati direnv. Također pokušavamo dodati red “export the TEST_VARIABLE=tecmint” u njega koristeći naredbu echo i izlazni znak za preusmjeravanje (>):

echo export TEST_VARIABLE=tecmint > .envrc

Podrazumevano, sigurnosni mehanizam blokira učitavanje datoteke .envrc. Pošto znamo da je sigurna datoteka, moramo odobriti njen sadržaj tako što ćemo pokrenuti sljedeću naredbu:

direnv allow .

Sada kada je sadržaj datoteke .envrc dozvoljen za učitavanje, provjerimo vrijednost TEST_VARIABLE koju smo postavili prije:

echo $TEST_VARIABLE

Kada izađemo iz direktorija tecmint_project, direnv će se isprazniti i ako još jednom provjerimo vrijednost TEST_VARIABLE, trebao bi biti prazan:

cd ..
echo $TEST_VARIABLE

Svaki put kada se pomaknete u direktorij tecmint_projects, datoteka .envrc će se učitati kao što je prikazano na sljedećem snimku ekrana:

cd tecmint_projects/

Da opozovete autorizaciju datog .envrc, koristite naredbu deny.

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

Za više informacija i uputstva za upotrebu, pogledajte direnv man stranicu:

man direnv

Osim toga, direnv također koristi stdlib (direnv-stdlib) koji dolazi s nekoliko funkcija koje vam omogućavaju da lako dodate nove direktorije u svoj PATHi uradite mnogo više.

Da biste pronašli dokumentaciju za sve dostupne funkcije, provjerite direnv-stdlib stranicu za ručni unos:

man direnv-stdlib

To je sve što smo imali za vas! Ako imate bilo kakvih pitanja ili razmišljanja koje možete podijeliti s nama, koristite obrazac za povratne informacije u nastavku.