Zoeken op website

Direnv - Beheer projectspecifieke omgevingsvariabelen in Linux


direnv is een handige open-source extensie voor je shell op een UNIX-besturingssysteem zoals Linux en macOS. Het is gecompileerd in een enkel statisch uitvoerbaar bestand en ondersteunt shells zoals bash, zsh, tcsh en fish.

Het belangrijkste doel van direnv is om projectspecifieke omgevingsvariabelen mogelijk te maken zonder ~/.profile of gerelateerde shell-opstartbestanden onoverzichtelijk te maken. Het implementeert een nieuwe manier om omgevingsvariabelen te laden en te verwijderen, afhankelijk van de huidige map.

Het wordt gebruikt om omgevingsvariabelen van 12factor apps (een methodologie voor het bouwen van software-as-a-service apps) te laden, geïsoleerde ontwikkelomgevingen per project te creëren en ook geheimen voor implementatie te laden. Bovendien kan het worden gebruikt om installatie- en beheeroplossingen met meerdere versies te bouwen, vergelijkbaar met rbenv, pyenv en phpenv.

Dus hoe werkt direnv?

Voordat de shell een opdrachtprompt laadt, controleert direnv of er een .envrc-bestand bestaat in de huidige (die u kunt weergeven met de opdracht pwd) en de bovenliggende map. Het controleproces verloopt snel en kan niet bij elke prompt worden opgemerkt.

Zodra het het bestand .envrc met de juiste rechten heeft gevonden, laadt het het in een bash-subshell en vangt het alle geëxporteerde variabelen op en maakt ze beschikbaar voor de huidige shell.

Direnv installeren op Linux-systemen

In de meeste Linux-distributies is het direnv-pakket beschikbaar om te installeren vanuit de standaardrepository's met behulp van uw systeempakketbeheerder, zoals weergegeven.

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

Op andere distributies zoals Red Hat Enterprise Linux (RHEL) en CentOS of elke distributie die snaps ondersteunt, kun je het installeren als een >knip. Hiervoor moet snapd op uw systeem zijn geïnstalleerd.

sudo snap install direnv

Hoe u direnv aan uw Bash-shell kunt koppelen

Na het installeren van direnv moet je het aan je huidige Linux-shell koppelen. Voeg voor Bash bijvoorbeeld de volgende regel toe aan het einde van het bestand ~/.bashrc.

Zorg ervoor dat het zelfs verschijnt na rvm, git-prompt en andere shell-extensies die de prompt manipuleren.

eval "$(direnv hook bash)"

Voor ZSH-Shell

Voeg de volgende regel toe aan het einde van het bestand ~/.zshrc:

eval "$(direnv hook zsh)" 

Voor VISschelp

Voeg de volgende regel toe aan het einde van het bestand ~/.config/fish/config.fish:

eval (direnv hook fish)

Sluit vervolgens het actieve terminalvenster en open een nieuwe shell of bron het bestand zoals weergegeven.

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

Hoe direnv te gebruiken in Linux Shell

Om te demonstreren hoe direnv werkt, zullen we een nieuwe map aanmaken met de naam tecmint_projects en daar naartoe gaan.

mkdir ~/tecmint_projects
cd tecmint_projects/

Laten we vervolgens een nieuwe variabele maken met de naam TEST_VARIABLE op de opdrachtregel en wanneer deze wordt herhaald, moet de waarde leeg zijn:

echo $TEST_VARIABLE

Nu gaan we een nieuw .envrc-bestand maken dat Bash-code bevat die door direnv wordt geladen. We proberen ook de regel “exporteer de TEST_VARIABLE=tecmint” eraan toe te voegen met behulp van het echo-commando en het uitvoeromleidingsteken (>):

echo export TEST_VARIABLE=tecmint > .envrc

Standaard blokkeert het beveiligingsmechanisme het laden van het bestand .envrc. Omdat we weten dat het een veilig bestand is, moeten we de inhoud ervan goedkeuren door de volgende opdracht uit te voeren:

direnv allow .

Nu de inhoud van het bestand .envrc mag worden geladen, gaan we de waarde van TEST_VARIABLE controleren die we eerder hebben ingesteld:

echo $TEST_VARIABLE

Wanneer we de map tecmint_project verlaten, wordt de direnv verwijderd en als we de waarde van TEST_VARIABLE nogmaals controleren, zou deze leeg moeten zijn:

cd ..
echo $TEST_VARIABLE

Elke keer dat u naar de map tecmint_projects gaat, wordt het bestand .envrc geladen, zoals weergegeven in de volgende schermafbeelding:

cd tecmint_projects/

Om de autorisatie van een bepaalde .envrc in te trekken, gebruikt u het deny commando.

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

Voor meer informatie en gebruiksinstructies, zie de direnv manpagina:

man direnv

Bovendien gebruikt direnv ook een stdlib (direnv-stdlib) en wordt geleverd met verschillende functies waarmee u eenvoudig nieuwe mappen aan uw PATH en doe nog veel meer.

Om de documentatie voor alle beschikbare functies te vinden, raadpleegt u de direnv-stdlib handmatige invoerpagina:

man direnv-stdlib

Dat is alles wat we voor je hadden! Als u vragen of gedachten heeft die u met ons wilt delen, kunt u het onderstaande feedbackformulier gebruiken.