Umgebungsvariable
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Eine Umgebungs-Variable (Environment-Variable) wird z.B. für Komfortfunktionen in der Shell verwendet, um Suchpfade zu Programmen oder eine zentrale Proxy-Konfiguration zu setzen. Environment-Variablen werden bei der Prozess-Generierung "vererbt", d.h. Kindprozesse bekommen eine Kopie des Environments des Vaterprozesses und vererben diese auch wieder an ihre Kinder weiter.
Mit dem Kommando echo
kann man sich den Variableninhalt ausgeben lassen [1]:
echo $VARIABLE
Wert_der_Variable
Mit printenv
kann man alle Variablen auf einmal anzeigen lassen.
Für die aktuelle Shell definiert man eine Variable wie folgt:
VARIABLE=0815
Das Kommando export
sorgt dafür, dass die Variable nicht nur in der aktuellen Shell, sondern auch in den von der aktuellen Shell aus aufgerufenen Programmen zur Verfügung steht:
export VARIABLE
Man kann das alles auch in eine einzige Zeile packen:
export VARIABLE=0815
Allgemein kann man sich die Programmumgebung als einen Satz von Schlüssel-Werte Paaren in der Form
NAME_DER_VARIABLE=Wert_der_Variable
vorstellen.
Einige gängige, vordefinierte Umgebungsvariablen sind:
HOME zeigt, wo der Besitzer des Prozesses seine eigenen Daten speichert.
PATH gibt an, wo im Dateisystem ausführbare Programme gesucht werden sollen (→ Umgebungsvariable/typische Anwendungsfälle (Abschnitt „PATH-erweitern“)).
PWD bezeichnet den Ort im Dateisystem, der zur Konstruktion eines absoluten Dateinamens dem relativen Dateinamen vorangestellt wird.
LANG gibt die Sprache an, in der das Programm mit dem Bediener kommunizieren soll (→ Umgebungsvariable/typische Anwendungsfälle (Abschnitt „Locale“) ff).
Regeln für die Namensgebung¶
Legt man eigene Umgebungsvariablen an, sollte man folgenden Punkte berücksichtigen:
Für den Namensteil einer Umgebungsvariablen kann man nur druckbare, aber keine regions- oder sprachspezifischen Zeichen verwenden; als Sonderzeichen ist nur der Unterstrich zulässig.
Nach einer vorsichtigen Konvention verwendet man für den Namensteil einer Umgebungsvariablen nur die ASCII-Buchstaben A-Z und a-z, den Unterstrich „_“ und die Ziffern „0-9“. Umgebungsvariable auf Systemebene verwenden keine Kleinbuchstaben. Variablen dürfen nicht mit einer Ziffer beginnen.
Bei Benutzung einer Shell sind oft die Werte von Umgebungsvariable und gleichnamiger Shell-Variable abzugleichen. In diesen Fällen ist für
NAME_DER_VARIABLEN
die Syntax für Shell-Variablen zu beachten. Beispielsweise ist zwar „NAME-DER-VARIABLEN
“ ein zulässiger Namensteil einer Umgebungsvariable, jedoch kein gültiger Bezeichner für eine Shell-Variable. „NAME_DER_VARIABLEN
“ ist in beiden Welten gültig.Für den Wertteil einer Umgebungsvariablen hat man grundsätzlich größere Freiheit. Jedoch kann man in der Praxis bei der Übertragung aus der Darstellung in einer Textdatei in den Programmspeicher kein Verfahren zur Umschreibung nicht druckbarer Zeichen voraussetzen.
Export von Variablen¶
Der Export einer Shell-Variablen bewirkt, dass diese Variable auch für zukünftige Kommandos bzw. aus der aktuellen Shell aufgerufenen Programmen zur Verfügung steht. Dies geschieht durch Eintrag der Shell-Variablen in die Programmumgebung, d.h. eine Umgebungsvariable wird angelegt.
Die Markierung einer Variablen mit dem Export-Attribut hängt von der verwendeten Shell ab. Bash und Dash verstehen die POSIX-konforme Methode:
NAME_DER_VARIABLE=Wert-der-Variable ; export NAME_DER_VARIABLE # POSIX-konform export NAME_DER_VARIABLE=Wert-der-Variable # POSIX-konform
also auch die folgenden Methoden:
NAME_DER_VARIABLE=Wert-der-Variable ; declare -x NAME_DER_VARIABLE # Bash-Stil declare -x NAME_DER_VARIABLE=Wert-der-Variable # Bash-Stil NAME_DER_VARIABLE=Wert-der-Variable ; typeset -x NAME_DER_VARIABLE # Bash-Stil, jedoch veraltet typeset -x NAME_DER_VARIABLE=Wert-der-Variable # Bash-Stil, jedoch veraltet
Dauerhafte Änderungen¶
Solche Variablen gelten nur für die aktuelle Sitzung. Variablen lassen sich jedoch auch dauerhaft definieren, indem man diese in den Konfigurationsdateien einträgt.
Umgebungsvariablen für laufenden Prozess ändern und abfragen¶
Jeder Prozess kann seine Umgebungsvariable (auch) aus der Datei /proc/self/environ lesen. Das kann man sich bspw. so anzeigen lassen:
cat /proc/self/environ | tr '\0' '\n'
Jedes Programm kann den Wertteil seiner eigenen Umgebungsvariablen verändern, sowie auch in der eigenen Programmumgebung Umgebungsvariablen löschen und neue anlegen, jedoch bieten nicht alle Programme auch dem Bediener Zugang zu diesen Funktionalitäten. Der direkte Zugriff auf auf die Umgebungsvariable anderer Programme ist nicht möglich; jedoch lassen sich diese dennoch teilweise ausspionieren: Unter /proc/<PID>/environ liegen nämlich Kopien der Programmumgebungen, so wie sie zum Start des jeweiligen Prozesses ausgesehen haben. Der Befehl
sudo cat /proc/1/environ | tr '\0' '\n'
zeigt beispielsweise die Programmumgebung des Init-Prozesses [2].
Bei der Prozessgenerierung bestimmt das den Start veranlassende Programm (parent) die Programmumgebung des von ihm gestarteten Programms (child). In der Regel vererbt der Mutterprozess seine Programmumgebung mit geringen oder ohne Änderungen an den Tochterprozess, jedoch ist dies nicht verpflichtend.
Links¶
Umgebungsvariable/Dateien – Dateien, in denen man eigene Umgebungsvariablen hinterlegen kann