Direnv - Administrer projektspecifikke miljøvariabler i Linux


direnv er en smidig open source-udvidelse til din shell på et UNIX-operativsystem som Linux og macOS. Det er samlet i en enkelt statisk eksekverbar og understøtter skaller som bash, zsh, tcsh og fisk.

Hovedformålet med direnv er at tillade projektspecifikke miljøvariabler uden rod ~/.profile eller relaterede shell-startfiler. Det implementerer en ny måde at indlæse og aflæse miljøvariabler afhængigt af den aktuelle mappe.

Det bruges til at indlæse 12factor-apps (en metode til opbygning af software-as-a-service-apps) miljøvariabler, oprette isolerede udviklingsmiljøer pr. Projekt og også indlæse hemmeligheder til implementering. Derudover kan den bruges til at oprette installations- og styringsløsninger i flere versioner, der ligner rbenv, pyenv og phpenv.

Så hvordan fungerer direnv?

Inden skallen indlæser en kommandoprompt, kontrollerer direnv for eksistensen af en .envrc -fil i den aktuelle (som du kan vise ved hjælp af pwd-kommandoen) og overordnet bibliotek. Kontrolprocessen er hurtig og kan ikke bemærkes ved hver prompt.

Når den først finder .envrc -filen med de relevante tilladelser, indlæses den i en bash-sub-shell, og den fanger alle eksporterede variabler og gør dem tilgængelige for den aktuelle shell.

Installation af direnv i Linux-systemer

I de fleste Linux-distributioner er direnv-pakken tilgængelig til installation fra standardopbevaringsstederne ved hjælp af din systempakkehåndtering som vist.

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

På andre distributioner såsom Red Hat Enterprise Linux (RHEL) og CentOS eller enhver distribution, der understøtter snaps, kan du installere det som et snap. Dette kræver, at du har snapd installeret på dit system.

$ sudo snap install direnv

Sådan tilsluttes direnv til din Bash Shell

Efter installation af direnv skal du tilslutte det til din nuværende Linux-skal. For eksempel til Bash skal du tilføje følgende linje i slutningen af filen ~/.bashrc .

Sørg for, at den vises selv efter rvm, git-prompt og andre shelludvidelser, der manipulerer prompt.

eval "$(direnv hook bash)"

Tilføj følgende linje i slutningen af filen ~/.zshrc :

eval "$(direnv hook zsh)" 

Tilføj følgende linje i slutningen af filen ~/.config/fish/config.fish :

eval (direnv hook fish)

Luk derefter det aktive terminalvindue, og åbn en ny skal, eller kilde filen som vist.

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

Sådan bruges direnv i Linux Shell

For at demonstrere, hvordan direnv fungerer, opretter vi en ny mappe kaldet tecmint_projects og flytter ind i den.

$ mkdir ~/tecmint_projects
$ cd tecmint_projects/

Lad os derefter oprette en ny variabel kaldet TEST_VARIABLE på kommandolinjen, og når den gentages, skal værdien være tom:

$ echo $TEST_VARIABLE

Nu opretter vi en ny .envrc -fil, der indeholder Bash-kode, der indlæses af direnv. Vi forsøger også at tilføje linjen "eksporter TEST_VARIABLE = tecmint" i den ved hjælp af ekkokommandoen og outputomdirigeringstegnet (>) :

$ echo export TEST_VARIABLE=tecmint > .envrc

Som standard blokerer sikkerhedsmekanismen indlæsningen af .envrc -filen. Da vi kender det som en sikker fil, skal vi godkende dens indhold ved at køre følgende kommando:

$ direnv allow .

Nu hvor indholdet af .envrc -fil har været tilladt at indlæse, lad os kontrollere værdien af TEST_VARIABLE , som vi indstillede før:

$ echo $TEST_VARIABLE

Når vi forlader biblioteket tecmint_project , aflæses direnv, og hvis vi igen kontrollerer værdien af TEST_VARIABLE , skal den være tom:

$ cd ..
$ echo $TEST_VARIABLE

Hver gang du flytter til biblioteket tecmint_projects, indlæses .envrc -filen som vist i følgende skærmbillede:

$ cd tecmint_projects/

For at tilbagekalde autorisationen for en given .envrc skal du bruge deny kommandoen.

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

For mere information og brugsanvisninger, se direnv man-siden:

$ man direnv

Derudover bruger direnv også en stdlib (direnv-stdlib) leveres med flere funktioner, der giver dig mulighed for nemt at tilføje nye mapper til din PATH og gøre så meget mere.

For at finde dokumentationen til alle tilgængelige funktioner, se direnv-stdlib manuel indtastningsside:

$ man direnv-stdlib

Det er alt, hvad vi havde til dig! Hvis du har spørgsmål eller tanker at dele med os, så brug feedbackformularen nedenfor.