Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
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 Shell aus aufgerufenen Programmen zur Verfügung steht:
export VARIABLE
Man kann das alles auch in eine einzige Zeile packen:
export VARIABLE=0815
Wie gesagt gelten solche Variablen nur für die aktuelle Sitzung. Variablen lassen sich jedoch auch dauerhaft definieren.
Die Variablen müssen in den Dateien auch mit dem Befehl export
definiert werden.
Je nachdem, ob man sich anmeldet (über einen Displaymanager oder über eine Textkonsole), sollte man die Variablen auf unterschiedliche Weise setzen.
Hier ist die Datei 90environment im Verzeichnis /etc/X11/Xsession.d zu erstellen. Die Umgebungsvariablen können dann dort eingetragen werden.
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.
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
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.
Eigene Umgebungsvariablen sollte man in der Datei ~/.profile setzen.
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.
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) des GNOME-Terminals das "momentan verwendete Profil bearbeiten" und im Reiter "Titel und Befehl" die Option "Befehl als Login-Shell starten" anwählen.
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 export PATH
Damit wird der existierenden Variable PATH
am Schluss ein weiterer Suchpfad /usr/local/progdir
(durch einen Doppelpunkt getrennt) angehängt. Mit dem export
-Kommando der Shell wird dann diese Variable ins Environment geschrieben. 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 export PATH
Beide Befehl wirken allerdings nur temporär. Um PATH
dauerhaft und systemweit zu erweitern, muss die Datei /etc/environment editiert werden.
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.
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.
Ü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.
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 18. Januar 2016 02:13 von nox24 erstellt.