|
Wie viele andere Shells verfügt die Bash über eine Liste der zuletzt
abgesetzten Kommandos, eine sogenannte History. Selbst wenn Sie nur
gelegentlich die Kommandozeile verwenden, erweist sich die History als ein
ausgesprochen nützlicher Helfer. Das gilt umso mehr, wenn Sie ausgiebigen
Gebrauch von der Shell machen. Die Möglichkeiten zur Nutzung der History
entsprechen der Benutzung eines effizienten Editors und werden in ihrem
vollen Umfang nur von den Wenigsten benutzt. Sie gehen weit über die
Möglichkeiten beispielsweise von doskey hinaus, das Sie vielleicht noch aus
DOS-Zeiten kennen. Wir möchten an dieser Stelle wieder nur die beiden
Möglichkeiten herausgreifen, die für den alltäglichen Gebrauch die wichtigste
Rolle spielen, und verweisen für weitere Details auf das fortgeschrittene
Shellkapitel.
Eine Übersicht über die aktuelle History erhalten Sie mit dem Kommando
ohne die Angabe eines Parameters. Das Kommando gibt eine nummerierte Liste
aus, die alle abgesetzten Kommandos inklusive ihrer Parameter enthält.
Standardmäßig werden bis zu 500 Kommandos verwaltet, dies übrigens unabhängig
davon, ob ein Kommando syntaktisch richtig war oder nicht. Die Kommandos
werden als Strings in exakt der eingegebenen Form gespeichert, genau so, wie
sie bei der Eingabe am Bildschirm erscheinen. Einzige Voraussetzung für die
Aufnahme in die Liste ist die Bestätigung des Kommandos durch die
Enter-Taste. Die Zahl der verwalteten Kommandos kann verändert werden - mehr zu
Konfigurationsfragen später. Die für uns interessante Frage lautet nun, in
welcher Weise wir von der History möglichst effizient Gebrauch machen können.
Der häufigste Gebrauch der History besteht in der Verwendung der Pfeiltasten
HOCH und RUNTER. Die HOCH- Taste läßt Sie das zuletzt abgesetzte
Kommando in die aktuelle Kommandozeile zurückholen. Sie brauchen
danach nur noch Enter zu drücken, um
das Kommando nochmals abzusetzen. Sie können die Kommandozeile aber auch wie
gewöhnlich editieren und erst dann bestätigen. Wiederholtes Drücken der HOCH
- Taste läßt Sie jeweils um einen Schritt weiter in der Liste zurückgehen.
Mit der RUNTER - Taste gehen Sie wieder den umgekehrten Weg nach vorne. Auf
diese
Weise können Sie sehr schnell in den zuletzt abgesetzten Kommandos blättern.
Je komplexer Ihre Kommandos werden, desto sinnvoller kann es werden, auch
weiter zurückliegende Kommandos wiederzuholen. Nun ist einfaches
Herumblättern nicht gerade ein effizienter Suchalgorithmus. Neben einer Reihe
weiterer Methoden leistet hier insbesondere die inkrementelle Rückwärtssuche
gute Dienste. Sie wird durch die Tastenkombination STRG+R
eingeleitet, die zu
dem folgenden Prompt führt:
Sie können nun damit beginnen, einen beliebigen String einzugeben, der in dem
Kommando enthalten ist, das Sie aus der History zurückholen wollen. Zu dem
von Ihnen angegebenen String wird das letzte Kommando herausgesucht, in dem
der von Ihnen eingegebene String vorkommt, und hinter dem Doppelpunkt
angezeigt. Sie müssen die Eingabe nun lediglich so lange verfeinern, bis das
gewünschte Kommando erscheint. Danach können Sie es entweder mit Enter sofort
absetzen oder eingeleitet durch ESC das Kommando zuvor noch editieren.
|
In den obigen Absätzen war gelegentlich vom Editieren der Kommandozeile die
Rede. Nun scheiden sich bei persönlichen Vorlieben für bestimmte Editoren
gewöhnlich die Geister. Unter Linux fällt die Entscheidung meist für einen
der Editoren vi oder Emacs in einer ihrer Implementationen. Wenn Sie einen
dieser Editoren als Ihren Leib- und Mageneditor bezeichnen, können Sie die
folgende Tabelle ruhig überspringen. Alle anderen können dieser Tabelle die
elementarsten Tastenkürzel entnehmen, welche die Bash im Emacs-Modus zur
Verfügung stellt. Der Emacs-Modus ist gleichzeitig die Standardeinstellung
der Bash.
Pfeiltasten |
VOR und ZURÜCK dienen wie üblich dem Verändern der Cursorposition |
Pos1, Ende |
an den Beginn / an das Ende der Zeile bewegen |
ALT+b,
ALT+f |
je ein Wort rückwärts (»backward«) oder vorwärts (»forward«)bewegen |
Backspace, Entf
|
Zeichen rückwärts / vorwärts löschen |
STRG+k |
bis zum Ende der Zeile löschen |
STRG+t |
die beiden vorangehenden Zeichen vertauschen (Dreher beseitigen) |
ALT+t |
die beiden vorangehenden Wörter vertauschen |
STRG+l |
löscht den Bildschirm |
|
Die Tabulator-Taste stellt Ihnen einen Mechanismus zur Verfügung, den
Sie gar nicht hoch genug einschätzen können: die Vervollständigung von
Namen. Es handelt sich hier lediglich um einen Hilfsmechanismus für
die Eingabe von Kommandozeilen und nicht etwa um einen mit der
sogenannten Dateinamensexpansion verwandten Mechanismus. Sollte der
Teufel es wollen, dass Sie von Berufs wegen mit der Kommandozeile
arbeiten werden, können wir hier getrost festhalten, dass diese eine
Taste ihnen viele Kilometer an Tastatureingaben ersparen wird.
Wozu die bash den begonnenen Namen zu vervollständigen sucht, hängt
von Ihrer Eingabe ab. Beginnt die Eingabe mit einem $, versucht sie,
einen Variablennamen daraus zu machen. Beginnt die Eingabe mit ~,
versucht sie einen Benutzernamen zu bilden. Beginnt sie mit @,
versucht sie die Eingabe zu einem Hostnamen zu vervollständigen. Wenn
keine dieser Bedingungen zutrifft, sucht die bash nach einem
Alias- oder Funktionsnamen. Und last but not least (dies ist tatsächlich der
häufigste Fall), bildet die bash einen Pfadnamen aus.
Selbstverständlich muß der Name, zu dem die bash vervollständigt,
sei es nun eine Variable, ein Benutzername, ein Hostname, ein Alias,
eine Funktion oder ein Pfad, auch wirklich existieren. Wenn Sie mit
einigen der genannten Begriffe im Augenblick noch nichts anfangen
können, machen Sie sich nichts draus. Alle diese Themen werden wir
später noch ausführlich behandeln.
Schlagen alle Versuche, eine passende Vervollständigung zu erreichen,
fehl, ertönt ein kurzer Piepston. Wenn Sie die Tabulator-Taste nun
nocheinmal betätigen, zeigt die bash Ihnen alle möglichen
Vervollständigungen an. Sie können dann die Eingabe so weit ergänzen,
bis sie eindeutig ist, um den Namen schließlich wieder mit der
Tabulator-Taste vervollständigen zu lassen. Wenn es überhaupt keine
mögliche Vervollständigung Ihrer Eingabe gibt, quittiert die bash das
wiederholte Drücken der Tabulator-Taste mit einem weiteren Piepston.
Die häufigste Anwendung dieses Mechanismus ist sicher das Navigieren
im Dateibaum. Erstens kann man auf diese Weise auch lange Pfade in
beachtlich kurzer Zeit eingeben (wenn Sie den Mechanismus erst einmal
beherrschen, vergleichen Sie dies einmal mit der Klickerei in einem
der grafischen Dateimanager). Und zweitens hilft es auch Ihrem
Gedächtnis auf die Sprünge, wenn Sie einen Datei- oder
Verzeichnisnamen nur noch ungefähr im Kopf haben. Tippen Sie dann
einfach die ersten 2 oder 3 Buchstaben, die Sie noch im Kopf haben,
und lassen Sie sich dann die möglichen Vervollständigungen
anzeigen. Eine hübsche Sache.
|
Obwohl der Begriff ebenfalls gut auf den gerade beschriebenen
Mechanismus passen könnte, bezeichnet er doch etwas völlig
anderes. Bei dieser Form der Expansion betätigen Sie keine Taste,
sondern Sie geben ein Muster (engl. pattern) ein, nach dem die
bash suchen soll. Ist die Suche erfolgreich, ersetzt die Shell das
Muster durch jeden einzelnen gefundenen Dateinamen.
Sie können Muster bilden, indem Sie neben den üblichen Zeichen, welche
einen Dateinamen bilden können, eines der Zeichen *, ?, oder
[ bzw. ] verwenden. Findet die Shell ein Wort, das eines dieser Zeichen
enthält, betrachtet sie es automatisch als Muster und sucht nach
passenden Dateinamen. Die Bedeutung der einzelnen Zeichen wird in
folgender Tabelle ersichtlich:
* |
eine beliebige Zeichenfolge, auch die leere |
? |
ein beliebiges einzelnes Zeichen |
[...] |
eines der in [...] aufgeführten Zeichen
|
[!...] |
keines der in [!...] aufgeführten Zeichen (das Ausrufezeichen wirkt als Negation)
|
Die genannten Zeichen werden auch als Wildcards oder Jokerzeichen
bezeichnet. Den Mechanismus, Wildcards auf alle Dateinamen aus einem
Verzeichnis anzuwenden und aus den passenden Dateinamen eine Liste zu
bilden, nennt man Globbing. Häufig will man eine Aktion für viele
Dateien eines Verzeichnisses durchführen. Z.B. könnten Sie alle
Dateien, die auf .gif enden, in ein anderes Verzeichnis verschieben
wollen. In einem solchen Fall matchen Sie diese Dateien durch das
Muster *.gif und benutzen das entsprechende Kommando, um die sich
ergebende Dateiliste zu verschieben. Ähnliches gilt für das
Fragezeichen.
Wenn Sie die Verwendung der eckigen Klammern noch nicht kennen,
verdienen diese noch einige Erklärung. Durch eckige Klammern können
Sie eine sogenannte Zeichenklasse definieren. Alle in den eckigen
Klammern stehenden Zeichen stehen im Gesamtmuster für ein einzelnes
Zeichen, ebenso wie das Fragezeichen. Während das Fragezeichen aber
ein beliebiges Zeichen matcht, können Sie durch die eckigen Klammern
ganz bestimmte Zeichen auswählen. Das Muster [aeiou] matcht einen
beliebigen Vokal. Das Gesamtmuster s[aeiou]x paßt also auf sax, sex,
six, sox und sux. Merken Sie sich, dass eine Zeichenklasse immer für
ein einzelnes Zeichen steht. Die Datei saeioux würde beispielsweise
nicht gematcht, da zwischen s und x mehr als ein Zeichen vorkommt.
Häufig ist es sinnvoller, die Zeichen anzugeben, die nicht gematcht
werden sollen. Dann verwendet man die eckigen Klammern mit einem
führenden Ausrufezeichen. Es handelt sich hier ebenso um eine
Zeichenklasse wie ohne Ausrufezeichen, d.h., es wird genau ein Zeichen
gematcht. Die Verwendung erfolgt also analog.
Die bash kennt weitere Mechanismen zur Expandierung, die gelegentlich
nützlich sein können. Wir möchten es jedoch an dieser Stelle bei
unseren Betrachtungen zum Thema belassen, um nicht zu tief in die
Details einzusteigen und den Überblick zu wahren. Wenn Sie zum
Expandierungsspezialisten aufsteigen wollen, lege ich Ihnen das
fortgeschrittene Shellkapitel ans Herz, das auch die letzten
chirurgischen Kunstgriffe der bash aufdecken wird.
|
|
|