Website-Suche

Direnv – Verwalten Sie projektspezifische Umgebungsvariablen unter Linux


direnv ist eine praktische Open-Source-Erweiterung für Ihre Shell auf einem UNIX-Betriebssystem wie Linux und macOS. Es wird in eine einzige statische ausführbare Datei kompiliert und unterstützt Shells wie bash, zsh, tcsh und fish.

Der Hauptzweck von direnv besteht darin, projektspezifische Umgebungsvariablen zu ermöglichen, ohne ~/.profile oder zugehörige Shell-Startdateien zu überladen. Es implementiert eine neue Möglichkeit zum Laden und Entladen von Umgebungsvariablen abhängig vom aktuellen Verzeichnis.

Es wird verwendet, um Umgebungsvariablen für 12-Faktor-Apps (eine Methode zum Erstellen von Software-as-a-Service-Apps) zu laden, pro Projekt isolierte Entwicklungsumgebungen zu erstellen und auch Geheimnisse für die Bereitstellung zu laden. Darüber hinaus können damit Installations- und Verwaltungslösungen für mehrere Versionen erstellt werden, die rbenv, pyenv und phpenv ähneln.

Wie funktioniert direnv?

Bevor die Shell eine Eingabeaufforderung lädt, prüft direnv, ob eine Datei .envrc im aktuellen (die Sie mit dem Befehl pwd anzeigen können) und übergeordneten Verzeichnis vorhanden ist. Der Überprüfungsprozess ist schnell und kann nicht bei jeder Eingabeaufforderung bemerkt werden.

Sobald es die Datei .envrc mit den entsprechenden Berechtigungen findet, lädt es sie in eine Bash-Sub-Shell, erfasst alle exportierten Variablen und stellt sie der aktuellen Shell zur Verfügung.

Direnv in Linux-Systemen installieren

In den meisten Linux-Distributionen steht das direnv-Paket zur Installation aus den Standard-Repositorys mit dem Paketmanager Ihres Systems zur Verfügung (siehe Abbildung).

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

Auf anderen Distributionen wie Red Hat Enterprise Linux (RHEL) und CentOS oder jeder Distribution, die Snaps unterstützt, können Sie es als schnappen. Dazu muss snapd auf Ihrem System installiert sein.

sudo snap install direnv

So binden Sie direnv in Ihre Bash-Shell ein

Nach der Installation von direnv müssen Sie es in Ihre aktuelle Linux-Shell einbinden. Fügen Sie beispielsweise für Bash die folgende Zeile am Ende der Datei ~/.bashrc hinzu.

Stellen Sie sicher, dass es auch nach rvm, git-prompt und anderen Shell-Erweiterungen erscheint, die die Eingabeaufforderung manipulieren.

eval "$(direnv hook bash)"

Für ZSH-Shell

Hängen Sie die folgende Zeile am Ende der Datei ~/.zshrc an:

eval "$(direnv hook zsh)" 

Für FISH Shell

Hängen Sie die folgende Zeile am Ende der Datei ~/.config/fish/config.fish an:

eval (direnv hook fish)

Schließen Sie dann das aktive Terminalfenster und öffnen Sie eine neue Shell oder geben Sie die Datei wie gezeigt als Quelle ein.

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

So verwenden Sie direnv in der Linux-Shell

Um zu demonstrieren, wie direnv funktioniert, erstellen wir ein neues Verzeichnis mit dem Namen tecmint_projects und verschieben es hinein.

mkdir ~/tecmint_projects
cd tecmint_projects/

Als nächstes erstellen wir eine neue Variable mit dem Namen TEST_VARIABLE in der Befehlszeile. Wenn sie zurückgegeben wird, sollte der Wert leer sein:

echo $TEST_VARIABLE

Jetzt erstellen wir eine neue .envrc-Datei, die Bash-Code enthält, der von direnv geladen wird. Wir versuchen auch, die Zeile „export the TEST_VARIABLE=tecmint“ mit dem Echo-Befehl und dem Ausgabeumleitungszeichen (>) hinzuzufügen:

echo export TEST_VARIABLE=tecmint > .envrc

Standardmäßig blockiert der Sicherheitsmechanismus das Laden der Datei .envrc. Da wir wissen, dass es sich um eine sichere Datei handelt, müssen wir ihren Inhalt genehmigen, indem wir den folgenden Befehl ausführen:

direnv allow .

Nachdem nun der Inhalt der Datei .envrc geladen werden konnte, überprüfen wir den Wert von TEST_VARIABLE, den wir zuvor festgelegt haben:

echo $TEST_VARIABLE

Wenn wir das Verzeichnis tecmint_project verlassen, wird die direnv entladen und wenn wir den Wert von TEST_VARIABLE noch einmal überprüfen, sollte er leer sein:

cd ..
echo $TEST_VARIABLE

Jedes Mal, wenn Sie in das Verzeichnis tecmint_projects wechseln, wird die Datei .envrc geladen, wie im folgenden Screenshot gezeigt:

cd tecmint_projects/

Um die Autorisierung eines bestimmten .envrc zu widerrufen, verwenden Sie den Befehl deny.

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

Weitere Informationen und Nutzungsanweisungen finden Sie auf der Manpage direnv:

man direnv

Darüber hinaus verwendet direnv auch eine stdlib (direnv-stdlib), die über mehrere Funktionen verfügt, mit denen Sie ganz einfach neue Verzeichnisse zu Ihrem hinzufügen können PATH und noch viel mehr.

Die Dokumentation für alle verfügbaren Funktionen finden Sie auf der manuellen Eintragsseite direnv-stdlib:

man direnv-stdlib

Das ist alles, was wir für Sie hatten! Wenn Sie Fragen oder Gedanken haben, die Sie uns mitteilen möchten, verwenden Sie das unten stehende Feedback-Formular.