ubuntuusers.de

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:

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:

  • Für den Namensteil einer Umgebungsvariablen kann man nur druckbare, aber keine regions- oder sprachspezifischen Zeichen verwenden; als Sonderzeichen ist nur der Untertrich 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.

Diese Revision wurde am 14. Februar 2020 12:28 von linux_joy erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Programmierung, Shell, Übersicht, System