ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

Umgebungsvariable

Achtung!

Dieser Artikel wird aktuell in Baustelle/Umgebungsvariable überarbeitet. Daher kann es sein, dass diese Seite hier veraltete oder nicht (mehr) zutreffende Informationen enthält. Vergleiche beide Versionen und wende dich im Zweifelsfall mit deinem konkreten Anliegen an das Support-Forum. Änderungen am Artikel bitte nur in Baustelle/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 Prozessgenerierung "vererbt", d.h. Kindprozesse bekommen eine Kopie des Environments des Vaterprozesses und vererben diese auch wieder an ihre Kinder weiter.

Es gibt unterschiedliche Möglichkeiten, Variablen zu definieren; das ist vom beabsichtigten Zweck abhängig. Entweder definiert man Variablen nur für die aktuelle Sitzung - dann ist sie nur bis zum nächsten Neustart gültig - oder, wenn Variablen bei jedem Systemstart automatisch gesetzt werden sollen, kann man diese in den entsprechenden Dateien eintragen. Die Syntax ist jedoch immer gleich:

VARIABLE=Wert-der-Variable

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.

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 

Dauerhafte Änderungen

Wie gesagt gelten solche Variablen nur für die aktuelle Sitzung. Variablen lassen sich jedoch auch dauerhaft definieren.

Hinweis:

Die Variablen müssen in den Dateien auch mit dem Befehl export definiert werden.

Systemweite Änderung

Je nachdem, ob man sich anmeldet (über einen Displaymanager oder über eine Textkonsole), sollte man die Variablen auf unterschiedliche Weise setzen.

Grafischer Login

Hier ist die Datei 90environment im Verzeichnis /etc/X11/Xsession.d zu erstellen. Die Umgebungsvariablen können dann dort eingetragen werden.

Hinweis:

Die Variable LD_LIBRARY_PATH lässt sich nicht auf diese Weise setzen. In diesem Fall sollte man eine der anderen hier vorgestellten Methoden nutzen oder ein Wrapper-Skript schreiben, welches die Variable vor Ausführen des jeweiligen Programms setzt.

Alternative ohne erweiterte Rechte

Will man sich als Benutzer eigene Umgebungsvariablen setzen, die nur innerhalb einer grafischen Oberfläche greifen, müssen diese in der Datei ~/.xsessionrc gesetzt werden. Diese überschreiben Variablen aus ~/.profile, ersetzen diese aber nicht auf der Konsole.

echo export FOO=bar >> ~/.xsessionrc 

Login über Textkonsole

Die Umgebungsvariablen lassen sich in /etc/profile einstellen. Einige Umgebungsvariablen (PATH, PS1) sind dort bereits voreingestellt. Am einfachsten ist es, diese Variablen wunschgemäß anzupassen. Es empfiehlt sich dabei, die Original-Einstellungen nur auszukommentieren, um sie jederzeit wieder verfügbar zu haben.

Alternativ kann man Variablen in der Datei /etc/environment eintragen. Diese Datei wird nicht von der Shell, sondern von pam_env ausgewertet. Man kann dort daher keine Shell-Syntax verwenden, sondern nur einfache Zeilen der Art

VARIABLE=Wert-der-Variable

wobei Wert-der-Variable genau so übernommen wird, wie es dasteht, also mit Anführungszeichen, $ usw. Auch die Verwendung von export ist nicht erlaubt. Änderungen in /etc/environment werden erst nach einer erneuten Anmeldung übernommen.

Änderung für einen Benutzer

Eigene Umgebungsvariablen sollte man in der Datei ~/.profile setzen.

Hinweis:

Existiert eine Datei ~/.bash_profile, so wird ~/.profile von der Bash (Standard-Shell) ignoriert. Auch Einstellungen in ~/.bashrc überschreiben in der Bash die Einstellungen aus ~/.profile.

Die Änderungen in der Datei ~/.profile können ohne Neustart der Bash durch folgenden Befehl übernommen werden:

source ~/.profile 

Es ist auch möglich, die Einträge in ~/.bashrc vorzunehmen. Dies ist jedoch in der Regel unnötig aufwändig, da dort enthaltene Befehle bei jedem Start einer Bash ausgeführt werden. Da die Environment-Variablen aber vererbt werden, ist dies nur einmal bei der Login-Shell notwendig, alle darunter gestarteten Bash-Prozesse erben dann die Einstellungen von dieser.

Hinweis:

Für viele Terminal-erfahrene Benutzer ist es irritierend, dass unter Ubuntu standardmäßig die Dateien ~/.bash_profile bzw. ~/.profile nicht ausgewertet werden. Um das "normale" Verhalten zu bekommen, kann man einfach im Kontextmenü (rechte Maustaste rechte Maustaste) des GNOME-Terminals das "momentan verwendete Profil bearbeiten" und im Reiter "Titel und Befehl" die Option "Befehl als Login-Shell starten" anwählen.

Häufige Anwendungsfälle

PATH erweitern

In der Variable PATH sind die Verzeichnisse hinterlegt, die bei einem Programmaufruf nach dem entsprechenden Programm durchsucht werden. Soll z.B. /usr/local/progdir zusätzlich in den Suchpfad aufgenommen werden, lässt sich dies folgendermaßen bewerkstelligen:

PATH=$PATH:/usr/local/progdir 

Damit wird der existierenden Variable PATH am Schluss ein weiterer Suchpfad /usr/local/progdir (durch einen Doppelpunkt getrennt) angehängt. Ein export-Kommando ist hier nicht erforderlich, weil die Shell im Environment existierende Werte automatisch aktualisiert. Da die Reihenfolge innerhalb der Variablen berücksichtigt wird (die Auswertung erfolgt von links nach rechts), kann man bei Bedarf den neuen Suchpfad auch voranstellen:

PATH=/usr/local/progdir:$PATH 

Beide Befehl wirken allerdings nur temporär. Um PATH dauerhaft und systemweit zu erweitern, muss die Datei /etc/environment editiert werden. Entsprechend muss benutzerspezifisch die Datei ~/.profile bearbeitet werden.

⚓︎

Proxy definieren

Erfolgt die Verbindung mit dem Internet über einen Proxyserver, so lässt sich dies in folgender Weise einstellen:

export http_proxy=http://mein.proxy.firma 

oder mit Portangabe

export http_proxy=http://mein.proxy.firma:3128 

Analog funktioniert das auch mit ftp_proxy für FTP.

human-readable BLOCK_SIZE

Viele GNU-Programme (df, du, ls usw.) zeigen Größen in "blocks" an. Diese Anzeige, der block-Größe, kann man so abändern, das sie leichter zu lesen ist.

BLOCK_SIZE=human-readable 

Das Vererben (export) dieser Variable ist jedoch nicht ratsam, damit die Ausgabe in Shell-Skripten etc. weiterhin stimmt.

Locale

Über die Locale-Umgebungsvariablen lassen sich Meldungen in Landessprache (Ausgabe und Fehlermeldungen) von Programmen einstellen.

LANG=de_DE.UTF-8
export LANG 

Im folgenden Beispiel wird ein einzelnes Programm explizit mit einer anderen als der Systemsprache gestartet (hier in Englisch):

LANG=en_US.UTF-8 PROGRAMM 

Ab Ubuntu 14.04:

LANGUAGE=de PROGRAMM 

Für deutsche Schrift innerhalb eines Programmes.

Programmkontext manipulieren

Einem Programm können beim Aufruf einmalig veränderte oder neue Umgebungsvariablen mitgegeben werden. Diese haben Vorrang gegenüber vererbten Werten. Vergleiche:

gcc --help 

und

LANG="en_GB.UTF-8" gcc --help 

Auf diese Weise ist es möglich, für einen spezifischen Aufruf einem Programm englischsprachige Ausgaben zu entlocken, die man z.B. in internationalen Hilfeforen verwenden kann. Die Standardlokalisierung kann mit "C" angesprochen werden:

LANG=C LC_ALL=C gcc --help 

Diese Revision wurde am 7. Februar 2018 18:00 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: System, Übersicht, Shell, Programmierung