Umgebungsvariablen

Aus LinuxUser 05/2007

Umgebungsvariablen

Bequem eingerichtet

Mit Umgebungsvariablen richten Sie sich die Kommandozeile individuell und gemütlich ein.

Geben Sie auf der Shell einen Befehl wie ls ein, versteht diese genau, dass Sie das Programm /bin/ls aufrufen möchten. Dass Sie dazu nicht den vollen Pfad eintippen müssen, liegt daran, dass die Bash weiß, in welchen Bereichen im Dateisystem sie nach ausführbaren Programmen suchen muss. Definiert ist diese Suchpfad in einer so genannten Umgebungsvariable. Auch das Aussehen des Shellprompts, die Zeitzone, das Home-Verzeichnis des Benutzers und vieles mehr legen solche Variablen fest.

Die Definition einer Umgebungsvariablen besteht aus drei Teilen: dem Namen, einem Zuweisungsoperator (=) und einem Wert:

variable=wert

Der Name darf Groß- und Kleinbuchstaben sowie Unterstriche und Zahlen enthalten. Einzige Einschränkung: Eine Variable darf nicht mit einer Ziffer beginnen. Enthält der Wert der Variablen Leer- oder Sonderzeichen, müssen Sie die Angabe in doppelte Anführungszeichen einschließen:

LESS="-X"

Tipp

Da sich die Bash (“Bourne Again Shell”) unter Linux als Standardshell durchgesetzt hat, beziehen sich sämtliche in diesem Artikel genannten Beispiele auf diesen Kommandozeileninterpreter.

Willkommen zuhause

Jeder Benutzer eines Linux-Systems findet ein “möbliertes Zimmer” vor, denn die Bash bringt für alle Accounts eine fertig eingerichtete Umgebung mit. Wie diese aussieht, hängt unter anderem von der verwendeten Distribution ab. Welche Variablen es in Ihrem eigenen Zuhause gibt und welchen Wert diese haben, verrät das Kommando env (engl, “environment”, Umgebung). Ein entsprechendes Beispiel zeigt Listing 1.

Listing 1
huhn@asteroid:~$ env
TERM=xterm
SHELL=/bin/bash
USER=huhn
LS_COLORS=no=00:fi=00:…
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:/home/huhn/bin
IRCSERVER=irc.freenode.net
LANG=de_DE@euro
…

Einige der Variablen, die das Listing zeigt, hat der Benutzer selbst gesetzt (siehe dazu den Abschnitt “Öfter mal was Neues”). Andere Shellvariablen sind vordefiniert, lassen sich aber bei Bedarf verändern. Als Schreibweise hat sich die Verwendung von Großbuchstaben eingebürgert. Die Tabelle “Standard-Umgebungsvariablen der Bash” gibt eine Übersicht häufig verwendeter Variablen für die Bash.

Standard-Umgebungsvariablen der Bash

Variable Bedeutung
CDPATH Suchpfad für das Kommando cd
EDITOR Standard-Texteditor
HISTFILE History-Datei, z. B. ~/.bash_history.
HISTSIZE maximale Anzahl der Befehle in der History
HOME Home-Verzeichnis des Benutzeraccounts
HOSTNAME Rechnername
LANG Sprache für Programmausgaben, Datumsformat etc., sofern keine der LC_-Variablen (siehe unten) gesetzt ist. Eine Liste aller definierten Sprachvariablen geben Sie mit dem Befehl locale aus.
LC_ALL Ländereinstellung, etwa C oder de; setzt LANG und alle anderen LC_-Variablen außer Kraft.
LC_MESSAGES Sprache für Programm- und Fehlermeldungen
LC_TIME Zeitformat
LOGNAME Login-Name des Benutzers
MAIL Pfad zur Mailbox des Benutzers (eingehende Post)
MANPATH Suchpfad für Manpages
PATH Suchpfad für ausführbare Dateien
PS1 Aussehen des Standard-Shellprompt; für nicht-privilegierte Benutzer in der Regel \u@\h:\w\$ (huhn@asteroid:~$), für den Administrator \h:\w\$ (asteroid:~#).
PWD Namen des aktuellen Verzeichnisses (engl.: “print working directory”)
SHELL voller Pfadname der verwendeten Shell (/bin/bash)
TERM Terminaleinstellung, etwa xterm oder vt100
TZ Zeitzone (engl.: “time zone”), etwa. CET oder MET

In die Schränke geschaut

Um den Wert einer Variablen anzuzeigen, verwenden Sie auf der Kommandozeile den Befehl echo. Mit diesem Kommando geben Sie alles aus, was hinter dem Befehl steht:

huhn@asteroid:~$ echo Huhu
Huhu

Darüber hinaus zeigt echo den Wert einer Variablen an, wenn Sie ein Dollarzeichen vor deren Namen stellen:

huhn@asteroid:~$ echo $LANG
de_DE@euro
huhn@asteroid:~$ echo $PS1
\u@\h:\w\$

Die Shell ersetzt die Variablen $LANG beziehungsweise $PS1 durch deren Wert und ruft dann das Programm echo zur Hilfe, das den Text ausgibt.

Urlaub vom Alltag

Auch wenn alles bequem eingerichtet ist, braucht der Mensch Abwechslung vom Alltag. Möchten Sie Ihre Sprachkenntnisse aufpolieren oder einfach nur etwas Neues ausprobieren, dann starten Sie über den folgenden Aufruf den Browser Firefox in Englisch, auch wenn die Arbeitsumgebung sonst Deutsch spricht:

LANG=en_GB firefox

Abbildung 1 demonstriert, wie Sie temporär in andere Sprachumgebungen reisen. Vor dem eigentlichen Programmaufruf zeigt das Beispiel, wie Sie mit dem Kommando locale -a eine Liste aller möglichen Spracheinstellungen ausgeben.

Abbildung 1: Original mit Untertiteln: Ändern Sie eine Variable temporär und ohne Spätfolgen.

Abbildung 1: Original mit Untertiteln: Ändern Sie eine Variable temporär und ohne Spätfolgen.

Öfter mal was Neues

Wie Sie gesehen haben, setzen Sie Variablen ganz einfach neu, indem Sie den Namen, den Zuweisungsoperator und den Wert eingeben. Auf diese Weise definierte Variablen und Werte gelten jedoch nur für die aktuelle Terminalsitzung. Um die Einstellungen zu exportieren, nehmen Sie das Kommando export zur Hilfe. Damit stehen sie auch Kind-Prozessen [1] und Subshells zur Verfügung.

Ein Beispiel: Setzen Sie für die aktuelle Bash die Variablen IRCNICK, IRCNAME und IRCSERVER, um kommandozeilenbasierten IRC-Clients wie Irssi oder BitchX zu verraten, mit welchem Nick und Namen Sie sich automatisch an einem bestimmten IRC-Server anmelden wollen. Starten Sie dann eine zweite Shell aus der ersten heraus und lassen sich den Wert der neuen Variablen anzeigen – wie Sie sehen, sehen Sie nichts. Verlassen Sie nun die zweite Bash über das Kommando exit ([Strg]+[D]) und exportieren Sie die neuen Variablen. Öffnen Sie jetzt eine neue Shell aus der ersten, so “erbt” sie die Variablen, die steht nun auch in der Subshell zur Verfügung stehen (Abbildung 2).

Abbildung 2: Erst über das Kommando     <code srcset=

export fügen Sie neue Variablen der Umgebung von Subshells hinzu.” width=”300″ height=”140″ /> Abbildung 2: Erst über das Kommando export fügen Sie neue Variablen der Umgebung von Subshells hinzu.

Tipp

Anstelle von zwei getrennten Aufrufen, z. B. LESS="-X"; export LESS können Sie das Definieren und Exportieren in einem Zug vornehmen: export LESS="-X".

Das Builtinexport hat noch mehr auf dem Kasten: Zusammen mit der Option -p beziehungsweise ohne Parameter aufgerufen, zeigt es eine Liste aller exportierten Variablen an, und mit der Option -n löschen eine Variable aus der Liste. Zwei Beispiele dazu zeigt Listing 2.

Listing 2
huhn@asteroid:~$ export
declare -x CHARSET="latin1"
declare -x LS_COLORS="no=00:fi=00:…"
declare -x IRCSERVER="irc.freenode.net"
…
huhn@asteroid:~$ export -n IRCSERVER

Renovierungsarbeiten

Die über export gesetzten Variablen gelten nur für die aktuelle Shell und deren Kind-Prozesse. Um sie dauerhaft einzurichten, passen Sie die Bash-Konfigurationsdatei an und richten Ihre Arbeitsumgebung neu ein. Dazu schreiben Sie sämtliche export-Befehle in eine der Bash-Startdateien, wie ~/.bashrc, und lesen diese im Anschluss an die Renovierungsarbeiten über das Kommando

source ~/.bashrc

neu ein. Listing 3 zeigt ein paar praktische Umgebungsvariablen samt ausführlicher Kommentare, mit denen Sie gut eingerichtet sind.

Listing 3
# Verhindert, dass "less" nach Programmende
# einen leeren Bildschirm zuruecklaesst:
export LESS="-X"
# Bringt Farbe ins Spiel: Benutzerprompt in
# Gruen, Root-Prompt in Rot:
if [ $(id -u) = 0 ] ; then
        COLOR1='\[\033[00;31m\]'
else
        COLOR1='\[\033[01;32m\]'
fi
COLOR2='\[\033[00;33m\]'
COLOR3='\[\033[00;37m\]'
PS1=$COLOR1'[\u@\h'$COLOR2' \W'$COLOR1']'$COLOR3'\$ '
PS2=$COLOR1'>'$COLOR3' '
# auf meinem Server in Kanada will ich
# trotzdem in der deutschen Zeitzone sein:
export TZ=CET
# ispell soll direkt den richtigen Zeichensatz
# und das richtige Woerterbuch verwenden:
export DICTIONARY=ngerman
export CHARSET=latin1

Glossar

Builtin

Kurz für “builtin command”. Eingebauter Befehl der Shell, zu dessen Ausführung sie kein gesondertes Programm aufrufen muss.

Infos

[1] Prozessverwaltung auf der Shell: Heike Jurzik, “Volle Kontrolle”, LinuxUser 03/2006, S. 92, http://www.linux-user.de/ausgabe/2006/03/092-zubefehl/

LinuxUser 05/2007 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben