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.