env (Umgebung)
100%

Text-Fu · Lektion 5

env (Umgebung)

Lerne, wie Bash Umgebungsvariablen erweitert, exportiert, untersucht und vorübergehend überschreibt.

Jeder Prozess besitzt eine Umgebung: eine Sammlung von Name-Wert-Zeichenfolgen, die er von seinem Elternprozess erbt. Shells übergeben damit Einstellungen wie Sprachvorgaben und Suchpfade für ausführbare Dateien an die Programme, die sie starten.

Variablenwerte in Bash erweitern

Bash ersetzt $NAME oder ${NAME} vor der Ausführung eines Befehls durch den Variablenwert. Setze die Erweiterung in Anführungszeichen, damit der Wert als ein Argument erhalten bleibt:

$ printf '%s\n' "$HOME"
/home/pete

Häufige Umgebungsvariablen sind:

  • HOME: Pfad zum Home-Verzeichnis des aktuellen Benutzers.
  • USER: Ein auf vielen Systemen von der Anmeldeumgebung bereitgestellter Benutzername.
  • PWD: Aktuelles Arbeitsverzeichnis der Shell.
  • PATH: Verzeichnisse, in denen nach Befehlsnamen gesucht wird.

Die Werte hängen von der Umgebung des aktuellen Prozesses ab und sind keine universellen Konstanten. Eine nicht gesetzte Variable wird als leere Zeichenfolge erweitert, sofern kein strengeres Shell-Verhalten aktiviert ist.

Welcher Bash-Befehl gibt den Wert von HOME aus und bewahrt ihn als ein Argument?

Die aktuelle Umgebung untersuchen

Führe env ohne Operanden aus, um die Umgebung auszugeben, die der env-Prozess geerbt hat:

$ env

Die Ausgabe enthält Einträge im Format NAME=value, zum Beispiel:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/bin
PWD=/home/user
USER=pete

Umgebungsvariablen können Zugangsdaten, Tokens, interne Pfade oder andere vertrauliche Daten enthalten. Veröffentliche keine vollständige env-Ausgabe in Issues oder Protokollen, ohne sie zu prüfen und sensible Werte zu entfernen.

Welcher Befehl gibt die Umgebung aus, die ein neu gestarteter Prozess sieht?

Befehle über PATH finden

PATH ist eine durch Doppelpunkte getrennte Verzeichnisliste, die Bash durchsucht, wenn ein Befehlsname keinen Schrägstrich enthält:

$ printf '%s\n' "$PATH"

Die Reihenfolge ist wichtig: Bash verwendet nach ihren Auflösungsregeln den ersten geeigneten Befehl. Mit type -a NAME kannst du prüfen, wie die aktuelle Shell einen Namen auflöst.

So stellst du /opt/coolapp/bin für die aktuelle Shell und ihre künftigen Kindprozesse voran und behältst den vorhandenen Suchpfad:

$ export PATH="/opt/coolapp/bin:$PATH"

Ersetze PATH nicht versehentlich ausschließlich durch das neue Verzeichnis und füge keine nicht vertrauenswürdigen beschreibbaren Verzeichnisse hinzu. Andernfalls können normale Befehle unauffindbar werden oder unerwartete Programme ausgeführt werden.

Welcher Befehl setzt /opt/coolapp/bin vor den vorhandenen PATH der aktuellen Bash und ihrer künftigen Kindprozesse?

Eine Variable an Kindprozesse exportieren

Bash-Variablen gehören nicht automatisch zur Umgebung von Kindprozessen. Markiere einen Namen mit export für die Vererbung:

$ export TEST=test

Die aktuelle Bash besitzt nun eine Variable namens TEST, und von ihr gestartete Befehle erben TEST=test. Ein Kindprozess kann über diesen Mechanismus die Umgebung seines Elternprozesses nicht verändern.

$ printenv TEST
test

Die Zuweisung bleibt normalerweise bestehen, bis du sie mit unset entfernst oder die Shell beendest. Eine systemweite Umgebung verändert sie nicht.

Was ist die wichtigste Wirkung von export TEST=test in Bash?

Einen Wert für einen Befehl setzen

Setze Zuweisungen vor einen Befehl, um Werte nur für dessen Umgebung bereitzustellen:

$ LANG=C sort names.txt

Der LANG-Wert der aktuellen Shell wird dadurch nicht dauerhaft verändert. Das Dienstprogramm env bietet eine weitere ausdrückliche Form:

$ env LANG=C sort names.txt

Mit env -i COMMAND startest du einen Befehl mit einer zunächst leeren Umgebung und kannst anschließend erforderliche Zuweisungen ergänzen. Viele Programme sind auf Umgebungswerte angewiesen; verwende diese Option daher bewusst.

Welcher Befehl führt sort names.txt mit LANG=C aus, ohne LANG der aktuellen Shell dauerhaft zu ändern?

Persönliche Werte in künftigen Sitzungen laden

Damit eine exportierte Variable in künftigen interaktiven Bash-Sitzungen erneut gesetzt wird, fügst du eine passende export-Zeile in die tatsächlich gelesene Startdatei ein, bei interaktiver Bash ohne Login häufig ~/.bashrc:

export TEST=test

Zsh verwendet häufig ~/.zshrc, Fish eine andere Syntax und Konfiguration. Login- und nicht interaktive Shells können weitere Dateien lesen. Ermittle daher Shell und Sitzungstyp, statt anzunehmen, dass eine Datei jeden Prozess konfiguriert.

Mit diesen Übungen kannst du Vererbung und Shell-Konfiguration praktisch trainieren:

  1. Shell-Umgebung und Konfiguration in Linux verwalten – Erstelle und verwalte lokale sowie Umgebungsvariablen, untersuche ihre Vererbung und mache Einstellungen über .bashrc dauerhaft.
  2. Umgebungsvariablen in Linux – Lerne Umgebungsvariablen zu erstellen, zu ändern und zu verwalten und verstehe ihre Rolle in der Systemkonfiguration.

Lektion abgeschlossen

Sie haben env (Umgebung) abgeschlossen

Du kannst nun die von Bash an Kindprozesse übergebene Umgebung untersuchen und steuern.

  • Erweitere Variablenwerte mit bewusst gesetzten Anführungszeichen.

  • Prüfe exportierte Werte, ohne Geheimnisse offenzulegen.

  • Bewahre und ordne Befehlsverzeichnisse in PATH.

  • Exportiere eine Shell-Variable für künftige Kindprozesse.

  • Überschreibe einen Wert für einen Befehl, ohne die Eltern-Shell zu verändern.

Lernfortschritt speichern

Erstellen Sie ein kostenloses Konto, um diese Lektion zu speichern und auf jedem Gerät weiterzulernen.

Kostenloses Konto erstellen
Nächste Lektion
Zurück zu Text-Fu