Direnv - Administrer prosjektspesifikke miljøvariabler i Linux


direnv er en kjekk åpen kildekode-utvidelse for skallet ditt på et UNIX-operativsystem som Linux og macOS. Den er kompilert til en enkelt statisk kjørbar fil og støtter skjell som bash, zsh, tcsh og fish.

Hovedformålet med direnv er å tillate prosjektspesifikke miljøvariabler uten å rote ~/.profile eller relaterte shell-oppstartsfiler. Den implementerer en ny måte å laste og losse miljøvariabler avhengig av gjeldende katalog.

Den brukes til å laste 12-faktor-apper (en metodikk for å bygge programvare-som-en-tjeneste-apper) miljøvariabler, lage isolerte utviklingsmiljøer per prosjekt, og også laste hemmeligheter for distribusjon. I tillegg kan den brukes til å bygge flerversjonsinstallasjons- og administrasjonsløsninger som ligner rbenv, pyenv og phpenv.

Så hvordan fungerer direnv?

Før skallet laster en ledetekst, sjekker direnv om det finnes en .envrc-fil i gjeldende (som du kan vise ved å bruke pwd-kommandoen) og overordnet katalog. Kontrollprosessen er rask og kan ikke merkes på hver forespørsel.

Når den finner .envrc-filen med de riktige tillatelsene, laster den den inn i et bash-underskall, og den fanger opp alle eksporterte variabler og gjør dem tilgjengelige for gjeldende skall.

Installerer direnv i Linux-systemer

I de fleste Linux-distribusjoner er direnv-pakken tilgjengelig for installasjon fra standardlagrene ved å bruke systempakkebehandleren som vist.

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

På andre distribusjoner som Red Hat Enterprise Linux (RHEL) og CentOS eller enhver distribusjon som støtter snaps, kan du installere den som en snap. Dette krever at du har snapd installert på systemet ditt.

sudo snap install direnv

Hvordan koble direnv til Bash Shell

Etter å ha installert direnv, må du koble den til ditt nåværende Linux-skall. For eksempel for Bash, legg til følgende linje på slutten av ~/.bashrc-filen.

Sørg for at den vises selv etter rvm, git-prompt og andre shell-utvidelser som manipulerer ledeteksten.

eval "$(direnv hook bash)"

For ZSH Shell

Legg til følgende linje på slutten av ~/.zshrc-filen:

eval "$(direnv hook zsh)" 

For FISH Shell

Legg til følgende linje på slutten av ~/.config/fish/config.fish-filen:

eval (direnv hook fish)

Lukk deretter det aktive terminalvinduet og åpne et nytt skall eller kilde filen som vist.

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

Hvordan bruke direnv i Linux Shell

For å demonstrere hvordan direnv fungerer, vil vi opprette en ny katalog kalt tecmint_projects og flytte inn i den.

mkdir ~/tecmint_projects
cd tecmint_projects/

La oss deretter lage en ny variabel kalt TEST_VARIABLE på kommandolinjen, og når den gjentas, skal verdien være tom:

echo $TEST_VARIABLE

Nå skal vi lage en ny .envrc-fil som inneholder Bash-kode som vil bli lastet av direnv. Vi prøver også å legge til linjen «export the TEST_VARIABLE=tecmint» i den ved å bruke ekkokommandoen og utdataomdirigeringstegnet (>):

echo export TEST_VARIABLE=tecmint > .envrc

Som standard blokkerer sikkerhetsmekanismen lasting av .envrc-filen. Siden vi vet at det er en sikker fil, må vi godkjenne innholdet ved å kjøre følgende kommando:

direnv allow .

Nå som innholdet i .envrc-filen har fått lov til å lastes, la oss sjekke verdien til TEST_VARIABLE som vi satte tidligere:

echo $TEST_VARIABLE

Når vi går ut av tecmint_project-katalogen, vil direnv bli lastet ut, og hvis vi sjekker verdien av TEST_VARIABLE en gang til, skal den være tom:

cd ..
echo $TEST_VARIABLE

Hver gang du flytter inn i tecmint_projects-katalogen, vil .envrc-filen lastes inn som vist i følgende skjermbilde:

cd tecmint_projects/

For å tilbakekalle autorisasjonen til en gitt .envrc, bruk kommandoen deny.

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

For mer informasjon og bruksinstruksjoner, se man-siden for direnv:

man direnv

I tillegg bruker direnv også en stdlib (direnv-stdlib) som kommer med flere funksjoner som lar deg enkelt legge til nye kataloger til PATHog gjør så mye mer.

For å finne dokumentasjonen for alle tilgjengelige funksjoner, sjekk den manuelle inngangssiden for direnv-stdlib:

man direnv-stdlib

Det var alt vi hadde for deg! Hvis du har spørsmål eller tanker å dele med oss, bruk tilbakemeldingsskjemaet nedenfor.