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:

  1. Ein Terminal verwenden

  2. mit Root-Rechten arbeiten

Inhaltsverzeichnis
  1. Regeln für die Namensgebung
  2. Export von Variablen
  3. Dauerhafte Änderungen
  4. Umgebungsvariablen für laufenden Prozess ä...
  5. Links

Wiki/Icons/terminal.png 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:

Regeln für die Namensgebung

Legt man eigene Umgebungsvariablen an, sollte man folgenden Punkte berücksichtigen:

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.