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.

env

env | sort — Listet alle Umgebungsvariablen alphabetisch sortiert auf.

env | sort

printenv — Gibt alle Umgebungsvariablen aus (wie env).

printenv

printenv <VAR> — Gibt den Wert einer bestimmten Variable aus.

printenv HOME

echo $<VAR> — Gibt den Wert einer Variable per Shell-Expansion aus.

echo $PATH

env | grep <pattern> — Sucht Variablen, die zu einem Muster passen.

env | grep -i proxy

Setzen & 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=hello

export <VAR> — Exportiert eine bereits gesetzte Shell-Variable.

MY_VAR=hello && export MY_VAR

export -p — Listet alle exportierten Variablen samt Werten auf.

export -p

declare -x <VAR>=<value> — Deklariert und exportiert eine Variable (Bash).

declare -x API_KEY=abc123

Entfernen & Aufheben

unset <VAR> — Entfernt eine Variable vollständig.

unset TEMP_VAR

export -n <VAR> — Hebt den Export auf (bleibt nur noch Shell-Variable).

export -n MY_VAR

env -u <VAR> <command> — Führt ein Kommando ohne eine bestimmte Variable aus.

env -u http_proxy curl https://example.com

Inline & temporär

<VAR>=<value> <command> — Setzt eine Variable nur für ein einzelnes Kommando.

NODE_ENV=production node app.js

env <VAR>=<value> <command> — Führt ein Kommando mit temporärer Variable aus (explizit).

env LANG=C sort data.txt

env -i <command> — Führt ein Kommando mit komplett leerer Umgebung aus.

env -i /bin/bash --norc

env -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 $PATH

export 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 python3

Gängige Muster

source .env — Lädt Variablen aus einer .env-Datei in die aktuelle Shell.

source .env

export $(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.

Verwandte Kommandos

  • bash – die Shell, in der Variablen gesetzt, exportiert und expandiert werden
  • id – zeigt Benutzer- und Gruppen-IDs, die das Verhalten der Umgebung mitprägen
  • sudo – Kommandos mit anderen Rechten ausführen, inklusive -E zum Erhalt der Umgebung