Wenn Sie auf der Konsole einen Befehl eingeben, weiß die Shell von selbst, wo sie nach dem Programm suchen muss. Starten Sie von einem entfernten Server ein X-Programm, weiß die Shell, auf welchem Desktop es angezeigt werden soll. Und Ihr IRC-Client weiß sogar, welchen IRC-Server Sie mit welchem Nick besuchen wollen – all das basiert auf richtig gesetzten Shell-Variablen.
Zu Befehl
Auch wenn sich viele Dinge bequem über grafische Oberflächen wie KDE oder GNOME regeln lassen – wer sein Linux-System richtig ausreizen möchte, kommt um die Kommandozeile nicht herum. Abgesehen davon gibt es auch sonst viele Situationen, in denen es gut ist, sich im Befehlszeilendschungel ein wenig auszukennen.
Die Bash: Unendliche Weiten… Ihren ganzen Funktionsumfang erhalten die Shell und viele andere Programme unter Linux mit Hilfe so genannter Shell-Variablen. Diese sind mit Variablen aus Programmiersprachen vergleichbar, können allerdings nur Zeichenketten (Strings) speichern. Einer Variable wird mit einem Zuweisungsoperator (dem =-Zeichen) ein Wert zugewiesen. Sollte dieser Sonder- oder Leerzeichen enthalten, muss die Zeichenkette in einfache oder doppelte Hochkommata gestellt werden, z. B. a=”1 2 3″.
Auf eine gesetzte Variable lässt sich jederzeit aus einem Shell-Skript oder auch direkt auf der Shell zugreifen, indem sie mit vorangestelltem Dollar-Zeichen verwendet wird, so gibt beispielsweise der Befehl echo $PATH den Inhalt der Shell-Variable PATH aus, in der alle Verzeichnisse (durch Doppelpunkte getrennt) abgelegt sind, in denen die Shell nach Programmen suchen soll, wenn Sie einen Befehlsnamen ohne seinen absoluten Pfad (also einfach vi statt /bin/vi) eingeben:
huhn@transpluto:~$ echo $PATH /usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome2/bin:/opt/gnome/bin:/opt/kde3/bin:/opt/kde2/bin:.:/usr/sbin:/sbin
Soll eine Variable nicht nur in der laufenden Shell, sondern auch in von ihr gestarteten Programmen gültig sein, muss der Variablenzuweisung noch das Schlüsselwort export vorangestellt werden: Aus a=”1 2 3″ wird dann export a=”1 2 3″.
Da es viel zu konfigurieren gibt, ist Linux bei der Verwendung von Shell-Variablen nicht sparsam – einen Überblick erhalten Sie, indem Sie den Befehl env (kurz für Environment, englisch: Umgebung) eingeben:
huhn@transpluto:~$ env PWD=/home/huhn PS1=\u@\h:\w\$ ENV=/home/huhn/.bashrc LS_COLORS=no=00:fi=00:… LANG=de_DE@euro SHELL=/bin/bash HOME=/home/huhn PATH=/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome2/bin:/opt/gnome/bin:/opt/kde3/bin:/opt/kde2/bin:.:/usr/sbin:/sbin LESSCHARSET=latin1 TERM=xterm HOST=transpluto …
Hier sehen Sie einige Umgebungsvariablen (“environment variables”), z. B. definiert PS1 das Aussehen des Shell-Prompts. In diesem Fall ist die Variable auf \u@\h:\w\$ gesetzt: \u steht für den Usernamen, es folgt ein @-Zeichen. \h gibt den Rechnernamen aus, und nach einem Doppelpunkt folgen noch \w für das aktuelle (Arbeits-) Verzeichnis und ein abschließendes Zeichen, das im Falle eines “normalen” Anwenders ein Dollarzeichen, im Falle des Administrators root ein Doppelkreuz (#) ist.
Über die Variable HOME wird Ihr Home-Verzeichnis festgelegt, in das Sie so z. B. springen können, indem Sie einfach cd eingeben. Ändern Sie den Wert der Variable HOME, so ändert sich auch das Verhalten von cd und verschiedenen Programmen, die diese Variable auswerten. Über LANG (hier: “de_DE@euro”) wird die Sprache definiert, in denen Ihnen Shell- und andere Anwendungen entgegen treten: Ist Ihr Linux-System beharrlich englischsprachig, liegt das meist an einer falsch eingestellten LANG-Variablen.
Für immer?
Wenn Sie einer Variable einen Wert zuweisen, gilt das immer nur für die aktuelle Shell. In jedem neuen Terminal-Fenster läuft eine eigene Shell. Um eine Variable dauerhaft einzurichten, schreiben Sie den entsprechenden export-Befehl in eine der Autostart-Dateien wie z. B. .profile und .bashrc in Ihrem Home-Verzeichnis.
Bevor Sie neue Variablen definieren, sollten Sie prüfen, ob diese nicht bereits vorhanden sind, da sonst andere Kommandos vielleicht nicht mehr wie gewohnt funktionieren. Überschreiben Sie beispielsweise die Variable DISPLAY, können Sie aus der aktuellen Shell keine X-Window-Programme mehr aufrufen, da diese auf eine korrekt gesetzte DISPLAY-Variable angewiesen sind. Normal enthält diese Variable übrigens einen Wert der Form “rechnername:0”.
In einigen Fällen können Shell-Variablen auch genutzt werden, um spezielle Komfort-Funktionen eines Programmes zu verwenden. So kann man etwa den IRC-Client BitchX dazu bewegen, sich automatisch mit dem richtigen Nickname an einem bestimmten IRC-Server anzumelden, indem drei Variablen gesetzt werden:
IRCNICK="mynickname" IRCNAME="identname" IRCSERVER="irc.freenode.net" export IRCNICK IRCNAME IRCSERVER
Während über IRCNICK und IRCSERVER die beiden bereits genannten Einstellungen vorgenommen werden, legt IRCNAME den Bestandteil fest, der im IRC als “Ident” bekannt ist; dieser ist in vielen Fällen der Username auf dem PC.
Gewolltes Vergessen
Übrigens können Sie den Befehl env mit der Option -u dazu verwenden, für die Ausführung eines Befehls bestimmte Variablen zu “vergessen”: Wollen Sie beispielsweise unter SuSE Linux YaST2 im Textmodus starten, könnten Sie dafür den Aufruf
env -u DISPLAY yast2
verwenden. Dadurch wird die Variable DISPLAY aus dem Environment gelöscht, bevor yast2 aufgerufen wird. Dieses Entfernen der Variable ließe sich zwar auch mit dem Befehl unset erreichen – damit wäre die Variable allerdings dauerhaft (in dieser Shell) gelöscht. Obiger env-Aufruf wirkt sich nur auf den aktuellen Aufruf aus.




