env — Umgebungsvariablen in der Shell verwalten
Umgebungsvariablen ansehen, setzen, exportieren und löschen – plus PATH-Verwaltung, .env-Dateien und portable Shebangs mit env.
Umgebungsvariablen steuern, wie Programme sich verhalten: vom Suchpfad PATH über die Sprache LANG bis zu API-Schlüsseln und Proxy-Einstellungen. env ist das Werkzeug, mit dem du diese Variablen anzeigst, gezielt für einen einzelnen Aufruf setzt oder eine Umgebung komplett zurücksetzt – und zusammen mit den Shell-Builtins export und unset verwaltest du den kompletten Lebenszyklus. Dieser Guide zeigt dir die Befehle, die du im Alltag wirklich brauchst, vom schnellen Nachschauen bis zur sauberen, reproduzierbaren Umgebung.
Variablen anzeigen
env — Listet alle Umgebungsvariablen auf.
envenv | sort — Listet alle Umgebungsvariablen alphabetisch sortiert auf.
env | sortprintenv — Gibt alle Umgebungsvariablen aus (wie env).
printenvprintenv <VAR> — Gibt den Wert einer bestimmten Variable aus.
printenv HOMEecho $<VAR> — Gibt den Wert einer Variable per Shell-Expansion aus.
echo $PATHenv | grep <pattern> — Sucht Variablen, die zu einem Muster passen.
env | grep -i proxySetzen & Exportieren
export <VAR>=<value> — Setzt und exportiert eine Variable (für Kindprozesse verfügbar).
export EDITOR=vim<VAR>=<value> — Setzt eine Shell-Variable (wird NICHT an Kindprozesse vererbt).
MY_VAR=helloexport <VAR> — Exportiert eine bereits gesetzte Shell-Variable.
MY_VAR=hello && export MY_VARexport -p — Listet alle exportierten Variablen samt Werten auf.
export -pdeclare -x <VAR>=<value> — Deklariert und exportiert eine Variable (Bash).
declare -x API_KEY=abc123Entfernen & Aufheben
unset <VAR> — Entfernt eine Variable vollständig.
unset TEMP_VARexport -n <VAR> — Hebt den Export auf (bleibt nur noch Shell-Variable).
export -n MY_VARenv -u <VAR> <command> — Führt ein Kommando ohne eine bestimmte Variable aus.
env -u http_proxy curl https://example.comInline & temporär
<VAR>=<value> <command> — Setzt eine Variable nur für ein einzelnes Kommando.
NODE_ENV=production node app.jsenv <VAR>=<value> <command> — Führt ein Kommando mit temporärer Variable aus (explizit).
env LANG=C sort data.txtenv -i <command> — Führt ein Kommando mit komplett leerer Umgebung aus.
env -i /bin/bash --norcenv -i HOME=$HOME PATH=$PATH <command> — Führt mit sauberer Umgebung aus, behält aber das Nötigste.
env -i HOME=$HOME PATH=$PATH bash -c 'env'PATH verwalten
echo $PATH — Zeigt den aktuellen PATH (doppelpunktgetrennte Verzeichnisse).
echo $PATHexport PATH="<dir>:$PATH" — Stellt ein Verzeichnis dem PATH voran (wird zuerst durchsucht).
export PATH="$HOME/.local/bin:$PATH"export PATH="$PATH:<dir>" — Hängt ein Verzeichnis an den PATH an (wird zuletzt durchsucht).
export PATH="$PATH:/opt/myapp/bin"echo $PATH | tr ':' '\n' — Zeigt die PATH-Einträge einzeln pro Zeile.
echo $PATH | tr ':' '\n'which <command> — Zeigt, über welchen PATH-Eintrag ein Kommando aufgelöst wird.
which python3Gängige Muster
source .env — Lädt Variablen aus einer .env-Datei in die aktuelle Shell.
source .envexport $(grep -v '^#' .env | xargs) — Exportiert alle Nicht-Kommentar-Zeilen aus einer .env-Datei.
export $(grep -v '^#' .env | xargs)${VAR:-default} — Nutzt einen Standardwert, wenn die Variable nicht gesetzt oder leer ist.
echo ${PORT:-8080}${VAR:?error message} — Bricht mit Fehler ab, wenn die Variable nicht gesetzt oder leer ist.
echo ${DATABASE_URL:?DATABASE_URL must be set}env -0 | sort -z | tr '\0' '\n' — Listet Variablen sicher auf (verträgt Werte mit Zeilenumbrüchen).
env -0 | sort -z | tr '\0' '\n' Fazit
env ist mehr als nur „alle Variablen anzeigen": Mit env VAR=wert befehl setzt du eine Variable sauber für genau einen Aufruf, ohne deine Shell-Umgebung zu verändern, und mit env -i startest du ein Programm in einer komplett leeren Umgebung – ideal für reproduzierbare Builds und zum Debuggen von Variablen-Problemen. Sehr verbreitet ist env außerdem im Shebang #!/usr/bin/env python3: Statt einen festen Interpreterpfad zu verdrahten, wird das Programm über den PATH gesucht – das macht Skripte portabel über verschiedene Systeme und virtuelle Umgebungen hinweg. Ein Sicherheitshinweis: Geheimnisse wie API-Schlüssel oder Passwörter sind als Umgebungsvariablen nicht wirklich privat – sie tauchen je nach System in /proc/<pid>/environ auf und können von Kindprozessen geerbt werden. Für echte Geheimnisse sind dedizierte Secret-Manager oder Dateien mit restriktiven Rechten die bessere Wahl. Und Vorsicht beim verbreiteten export $(grep -v '^#' .env | xargs): Es bricht bei Werten mit Leerzeichen oder Anführungszeichen – für komplexe .env-Dateien lieber set -a; source .env; set +a nutzen.
Weiterführende Links
- Wikipedia: Umgebungsvariable – Grundlagen zu Umgebungsvariablen und ihrer Vererbung an Kindprozesse
- ubuntuusers-Wiki: Umgebungsvariable – deutschsprachige Praxis-Doku zum Setzen und Nutzen von Variablen unter Linux