Einführung in Umgebungsvariablen
Nachdem wir nun die grundlegenden Variablen verstanden haben, wollen wir uns den Umgebungsvariablen zuwenden. Umgebungsvariablen sind Variablen, die für alle Kindprozesse der Shell verfügbar sind. Das bedeutet, dass Skripte und Programme, die aus dieser Shell heraus gestartet werden, auf sie zugreifen können.
-
Um alle aktuellen Umgebungsvariablen anzuzeigen, verwenden Sie den env
-Befehl:
env
Dies wird eine lange Liste von Variablen anzeigen. Sorgen Sie sich nicht, wenn Sie noch nicht alle verstehen - wir werden später einige der wichtigsten behandeln.
-
Eine der wichtigsten Umgebungsvariablen ist PATH
. Schauen wir uns diese genauer an:
echo $PATH
Die PATH
-Variable listet Verzeichnisse auf, in denen das System nach ausführbaren Programmen sucht. Jedes Verzeichnis wird durch einen Doppelpunkt (:
) getrennt.
-
Jetzt erstellen wir unsere eigene Umgebungsvariable. Wir verwenden den export
-Befehl, um eine Umgebungsvariable zu erstellen:
export MY_ENV_VAR="This is an environment variable"
Der export
-Befehl macht die Variable für Kindprozesse verfügbar. Dies ist der Hauptunterschied zwischen Shell-Variablen und Umgebungsvariablen.
-
Um den Unterschied zu veranschaulichen, erstellen wir ein Shell-Skript, das versucht, sowohl auf eine normale Shell-Variable als auch auf eine Umgebungsvariable zuzugreifen:
echo '#!/bin/bash
echo "Shell variable: $my_var"
echo "Environment variable: $MY_ENV_VAR"' > test_vars.sh
Machen Sie das Skript ausführbar:
chmod +x test_vars.sh
Führen Sie nun das Skript aus:
./test_vars.sh
Sie sollten feststellen, dass die Umgebungsvariable (MY_ENV_VAR
) zugänglich ist, während die Shell-Variable (my_var
) es nicht ist. Dies liegt daran, dass my_var
nicht exportiert wurde, sodass Kindprozesse (wie das Skript) nichts von ihr wissen.
-
Um zu überprüfen, dass MY_ENV_VAR
nun eine Umgebungsvariable ist, können wir erneut den env
-Befehl verwenden, aber diesmal filtern wir die Ausgabe mit grep
:
env | grep MY_ENV_VAR
Sie sollten Ihre neue Variable in der Ausgabe sehen.
-
Sie können auch direkt den Wert Ihrer neuen Umgebungsvariable überprüfen:
echo $MY_ENV_VAR
Exzellent! Sie haben nun Ihre erste Umgebungsvariable erstellt und gesehen, wie sie sich von einer Shell-Variablen unterscheidet. Der Hauptunterschied besteht darin, dass Umgebungsvariablen, die mit export
erstellt werden, für Kindprozesse verfügbar sind, während Shell-Variablen dies nicht sind.
Umgebungsvariablen und Shell-Variablen haben jeweils ihren eigenen Geltungsbereich. Wenn Sie eine Variable exportieren (z.B. export MY_ENV_VAR="something"
), wird sie für alle Subprozesse verfügbar, die aus dieser Shell heraus gestartet werden (z.B. ein Shell-Skript, das von derselben Shell ausgeführt wird). Wenn Sie jedoch eine völlig separate Shell-Sitzung öffnen, erbt diese Sitzung nicht die Variablen aus Ihrer aktuellen Shell, es sei denn, Sie setzen sie speziell in einer Startdatei (wie .zshrc
oder .bashrc
).
Mit anderen Worten:
- Eine normale Shell-Variable ist nur innerhalb der aktuellen Sitzung sichtbar.
- Eine exportierte Variable ist für Kindprozesse, die aus dieser Sitzung heraus gestartet werden, verfügbar.
- Eine Variable, die in einer Shell-Startdatei (wie
.zshrc
) festgelegt wird, wird auf alle neuen Sitzungen dieser Shell angewendet.
Sie können nicht direkt auf die Variablen eines anderen Benutzers oder einer anderen Shell zugreifen, da jeder Prozess seine eigene Umgebung verwaltet. Wenn Sie eine neue Shell starten, erhält diese eine Kopie der exportierten Variablen des übergeordneten Prozesses, aber nicht die Variablen, die nur in der ursprünglichen Shell ohne export
festgelegt wurden.
Wir werden in den folgenden Schritten lernen, wie man Umgebungsvariablen dauerhaft festlegt.