Direnv - Manage Project-Spezifical Environment Variables in Linux


direnv ass eng flott Open Source Extensioun fir Är Shell op engem UNIX Betribssystem wéi Linux a MacOS. Et ass an eng eenzeg statesch ausführbar kompiléiert an ënnerstëtzt Shells wéi Bash, zsh, tcsh, a Fësch.

Den Haaptzweck vum Direnv ass fir Projetspezifesch Ëmfeldvariablen z'erméiglechen ouni ~/.profile oder verwandte Shell-Startupdateien ze räissen. Et implementéiert en neie Wee fir Ëmfeldvariablen ze lueden an ze lueden ofhängeg vum aktuellen Verzeechnes.

Et gëtt benotzt fir 12Factor Apps (eng Methodologie fir Software-as-a-Service Apps ze bauen) Ëmfeldvariablen ze lueden, pro-Projet isoléiert Entwécklungsëmfeld ze kreéieren, an och Geheimnisser fir d'Deployment ze lueden. Zousätzlech kann et benotzt ginn fir Multi-Versioun Installatioun a Gestiounsléisungen ähnlech wéi rbenv, pyenv a phpenv ze bauen.

Also Wéi funktionnéiert Direnv?

Ier d'Shell eng Kommandoprompt lued, kontrolléiert Direnv fir d'Existenz vun enger .envrc-Datei an der aktueller (déi Dir mat dem pwd-Kommando affichéiert) an Elterenverzeechnes. De Kontrollprozess ass séier a kann net op all Ufro bemierkt ginn.

Wann et d'.envrc-Datei mat de passenden Permissiounen fënnt, lued se se an eng Bash-Sub-Shell an et erfaasst all exportéiert Variablen a mécht se zur aktueller Shell zur Verfügung.

Direnv an Linux Systemer installéieren

An de meeschte Linux Verdeelungen ass den Direnv Package verfügbar fir aus de Standardrepositories ze installéieren mat Ärem System Package Manager wéi gewisen.

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

Op aner Verdeelungen wéi Red Hat Enterprise Linux (RHEL) an CentOS oder all Verdeelung déi snapd ënnerstëtzt op Ärem System installéiert.

$ sudo snap install direnv

Wéi Hook Direnv an Är Bash Shell

Nodeems Dir Direnv installéiert hutt, musst Dir se an Är aktuell Linux Shell haken. Zum Beispill fir Bash, füügt déi folgend Zeil um Enn vun der ~/.bashrc Datei.

Vergewëssert Iech datt et och no rvm, git-Prompt an aner Shell-Extensiounen erschéngt, déi d'Prompt manipuléieren.

eval "$(direnv hook bash)"

Fügt déi folgend Zeil um Enn vun der ~/.zshrc Datei un:

eval "$(direnv hook zsh)" 

Fügt déi folgend Zeil um Enn vun der ~/.config/fish/config.fish Datei un:

eval (direnv hook fish)

Da maacht déi aktiv Terminalfenster zou an öffnen eng nei Shell oder Quell d'Datei wéi gewisen.

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

Wéi Dir Direnv an Linux Shell benotzt

Fir ze demonstréieren wéi Direnv funktionnéiert, erstellen mir en neie Verzeichnis mam Numm tecmint_projects a plënneren an et.

$ mkdir ~/tecmint_projects
$ cd tecmint_projects/

Als nächst, loosst eis eng nei Variabel mam Numm TEST_VARIABLE op der Kommandozeilung erstellen a wann et gekloert gëtt, soll de Wäert eidel sinn:

$ echo $TEST_VARIABLE

Elo wäerte mir eng nei .envrc Datei erstellen, déi Bash Code enthält, deen duerch direnv gelueden gëtt. Mir probéieren och d'Zeil \export the TEST_VARIABLE=tecmint\ dran ze addéieren mat dem Echo Kommando an dem Output Redirection Charakter (>):

$ echo export TEST_VARIABLE=tecmint > .envrc

Par défaut blockéiert de Sécherheetsmechanismus d'Luede vun der .envrc Datei. Well mir wëssen datt et eng sécher Datei ass, musse mir säin Inhalt approuvéieren andeems Dir de folgende Kommando ausféiert:

$ direnv allow .

Elo datt den Inhalt vun .envrc Datei erlaabt ass ze lueden, loosst eis de Wäert vun TEST_VARIABLE kontrolléieren, dee mir virdru festgestallt hunn:

$ echo $TEST_VARIABLE

Wa mir de tecmint_project Verzeichnis verloossen, gëtt den Direnv entluet a wa mir de Wäert vun TEST_VARIABLE nach eng Kéier iwwerpréift, da sollt et eidel sinn:

$ cd ..
$ echo $TEST_VARIABLE

All Kéier wann Dir an den tecmint_projects Verzeichnis plënnert, gëtt d'Datei .envrc gelueden wéi am folgenden Screenshot gewisen:

$ cd tecmint_projects/

Fir d'Autorisatioun vun engem gegebene .envrc z'erweideren, benotzt de deny Kommando.

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

Fir méi Informatioun a Gebrauchsinstruktiounen, kuckt d'direnv Man Säit:

$ man direnv

Zousätzlech benotzt direnv och e stdlib (direnv-stdlib) kënnt mat verschiddene Funktiounen, déi Iech erlaben einfach nei Verzeechnes op Äre PATH ze addéieren an esou vill méi ze maachen.

Fir d'Dokumentatioun fir all verfügbare Funktiounen ze fannen, kuckt d'direnv-stdlib manuell Entrée Säit:

$ man direnv-stdlib

Dat ass alles wat mir fir Iech haten! Wann Dir Froen oder Gedanken hutt fir mat eis ze deelen, benotzt de Feedbackformular hei ënnen.