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.
Text-Fu · Lektion 5
env (Umgebung)
Lerne, wie Bash Umgebungsvariablen erweitert, exportiert, untersucht und vorübergehend überschreibt.
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:
- Shell-Umgebung und Konfiguration in Linux verwalten – Erstelle und verwalte lokale sowie Umgebungsvariablen, untersuche ihre Vererbung und mache Einstellungen über
.bashrcdauerhaft. - 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