8.3 Die Bourne Again Shell (bash)
8.3.1 Umgebungsvariablen
Ein Linux System ist ein komplexes Beast und es gibt vieles über das die Übersicht behalten werden muss. Viele kleine Dinge die während Ihrer normalen Interaktion mit diversen Programmen ins Spiel kommen (viele von diesen müssen Sie garnicht kennen). Niemand will einen Haufen von Optionen an jedes Programm, welches er ausführen will, übergeben, um ihm mitzuteilen, welche Art von Terminal genutzt wird, den Hostnamen, wie seine Anzeige aussehen soll...
Deshalb gibt es einen Mechanismus der "Umgebung" genannt wird, welcher dieses Problem löst. Die Umgebung definiert die Bedinungen unter welchen Programme laufen, und einige dieser Definitionen sind variabel; der Benutzer kann sie anpassen und damit spielen wie es nur auf einem Linux-System möglich ist. Viele Shells haben Umgebungsvariablen (wenn nicht, dann ist es wahrscheinlich keine wirklich brauchbare Shell). Hier geben wir einen Überblick über die Befehle die die bash zum Manipulieren von ihren Umgebungsvariablen liefert.
set wird Ihnen alle Umgebungsvariablen anzeigen, die aktuell definiert sind und auch deren Werte. Wie die meisten in Bash eingebauten Funktionen kann sie auch mehrere andere Dinge tun (mit Parametern); Wir überlassen es der bash(1) man page dies zu behandeln. Beispiel 8-1 zeigt einen Auszug eines set Befehls der auf einem der Rechner des Autors ausgeführt wurde. Beachten Sie in diesem Beispiel die PATH Variable die vorher diskutiert wurde. Programme in jedem dieser Verzeichnisse können ausgeführt werden indem einfach der Dateiname angegeben wird.
Beispiel 8-1. Umgebungsvariablen mit set anzeigen
% set PATH=/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin: /usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin: /usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin PIPESTATUS=([0]="0") PPID=4978 PS1='\h:\w\$ ' PS2='> ' PS4='+ ' PWD=/home/logan QTDIR=/usr/local/lib/qt REMOTEHOST=ninja.tdn SHELL=/bin/bash % unset VARIABLE
unset wird alle Variablen, die ihm übergeben werden entfernen, wobei sowohl der Name als auch der Wert ausgelöscht werden; bash wird vergessen das die Variable jemals existiert hat. (Keine Sorge. Solange es sich nicht um etwas handelt, das explizit in dieser Shell Sitzung definiert wurde, wird es wahrscheinlich in einer anderen Sitzung wieder definiert).
% export VARIABLE=some_value
Nun, export ist wirklich praktisch. Mit ihm geben Sie der Umgebungsvariable VARIABLE den Wert "some_value"; wenn VARIABLE nicht existiert hate, dann ist das jetzt der Fall. Wenn VARIABLE schon einen Wert hatte, nun, der ist futsch. Das ist nicht so gut, wenn Sie nur versuchen ein Verzeichnis zu Ihrem PATH hinzuzufügen. In diesem Fall möchten sie wahrscheinlich folgendes tun:
% export PATH=$PATH:/some/new/directory/
Beachten Sie den Gebrauch von $PATH dort: wenn Sie wollen das bash eine Variable interpretiert (sie mit ihrem Wert ersetzen), hängen Sie ein $ vor den Anfang des Variablennamens. Zum Beispiel wird echo $PATH den Wert von PATH ausgeben. In meinem Fall:
% echo $PATH /usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin: /usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin: /usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
8.3.2 Tab-Vervollständigung
(Hier kommt nochmal etwas tolles.)
1. Eine Befehlszeilen Oberfläche bedeutet viel Tippen.
2. Tippen ist Arbeit.
3. Niemand mag Arbeit.
Aus 3 und 2 können wir ermitteln das (4) niemand Tippen mag. Glücklicherweise beschützt uns bash vor (5)Fortunately, bash saves us from (5) (niemand mag Befehlszeilen Oberflächen).
Sie fragen wie bash dieses Kunststück vollbringt? Ergänzend zur Wildcard Erweiterung die wir vorher diskutiert haben, enthält bash Tab Verfollständigung.
Tab Verfollständigung funktioniert in Etwa so: Sie tippen den Namen einer Datei. Vielleicht ist sie in ihrem PATH, vielleicht tippen Sie ihn ausführlich. Alles was Sie tun müssen ist genügend zu tippen um ihn eindeutig zu identifizieren. Dann drücken Sie die Tab Taste. bash wird herausfinden was Sie wollen und wird für Sie zu Ende tippen!
Zeit für Beispiele. /usr/src enthält zwei Unterverzeichnisse: /usr/src/linux und /usr/src/sendmail. Ich will sehen was sich in /usr/src/linux befindet. Also tippe ich nur ls /usr/src/l, drücke die TAB Taste und bash gibt mir ls /usr/src/linux.
Nun nehmen wir an es gibt dort zwei Verzeichnisse /usr/src/linux und /usr/src/linux-old; Wenn ich /usr/src/l tippe und TAB drücke, wird bash so viel einfügen wie sie kann und ich bekomme /usr/src/linux. Ich kann hier aufhören oder ich kann nochmal TAB drücken und bash wird eine Liste aller Verzeichnisse ausgeben, die dem entsprechen, das ich bis jetzt getippt habe.
Folglich weniger Tippen (und folglich können Leute Befehlszeilen Oberflächen mögen). Ich habe Ihnen gesagt es ist toll.