Next: Anpassung des Kommandozeileneditors
Up: bash
Previous: Der Kommandozeileneditor
Die bash
speichert eine gewisse Anzahl kompletter Kommandozeilen ab und erlaubt
dem Benutzer, den Kommandozeilenspeicher auf zwei verschiedene Weisen
anzusprechen.
Die Anzahl der gespeicherten Kommandozeilen kann mit der
Shellvariablen HISTSIZE eingestellt werden. Weitere
Einstellungen können mit den Variablen HISTFILE
HISTFILESIZE und history_control vorgenommen werden. Die
Benutzung dieser Variablen wird ab Seite
beschrieben.
Im Gegensatz zu den Vorbildern emacs
oder vi ist für den Kommandozeileneditor der Arbeitsbereich auf
die aktuelle Zeile beschränkt. Absätze und Seiten existieren hier
nicht. Mit dem Kommandozeilenspeicher eröffnet sich aber doch eine
zweite Dimension, die das Blättern und Suchen in alten Zeilen zu einer
praktischen Erweiterung des Editors macht.
- Abschluß einer Kommandozeile (RETURN)
- Wie bereits gesagt,
wird jede Kommandozeile mit einem Zeilenende (RETURN)
abgeschlossen. Dabei ist es egal, wo sich die Einfügemarke innerhalb
der Zeile gerade befindet, es wird immer die gesamte Zeile
bearbeitet. Wenn sie nicht leer ist, wird sie sofort im ``rohen''
Zustand in den Kommandozeilenspeicher übernommen.
Wenn die
Shellvariable history_control das Wort ` ignorespace'
enthält, werden Kommandozeilen, die mit einem Leerzeichen beginnen,
nicht gespeichert. Enthält die Variable das Wort ` ignoredups',
werden nur die Kommandozeilen gespeichert, die sich von der zuletzt
gespeicherten unterscheiden. Mit ` ignoreboth' werden die
beiden Features eingeschaltet.
Wie alle Funktionen des Editors kann diese Funktion auf beliebige
Tasten gelegt werden, wenn auch in diesem Fall davon abzuraten ist.
( accept-line)
- Kommando zurück (C- p)
- blättert im Kommandozeilenspeicher
eine Position zurück und gibt die komplette Zeile zum Editieren
auf den Bildschirm. Diese Funktion ist auch an die HOCH-Taste des Cursorblocks gebunden. ( previous-history)
- Kommando vorwärts (C- n)
- blättert im
Kommandozeilenspeicher eine Position vorwärts und gibt die
komplette Zeile zum Editieren auf den Bildschirm. Diese Funktion
ist auch über die RUNTER-Taste des Cursorblocks zu erreichen.
( next-history)
- zum ersten Kommando (M-<)
- holt die erste
Kommandozeile aus dem Kommandozeilenspeicher in den Editor. (
beginning-of-history)
- zum letzten Kommando (M->)
- holt die
letzte Kommandozeile aus dem Kommandozeilenspeicher in den Editor.
end-of-history)
- Kommando inkrementell rückwärts suchen (C- r)
- sucht schrittweise
(inkrementell)
rückwärts im Kommandozeilenspeicher nach einer
Kommandozeile mit exakt passendem Muster. Das gesuchte Muster wird
interaktiv eingegeben und die erste passende Zeile sofort angezeigt.
Reguläre Ausdrücke im Muster werden nicht interpretiert, sondern
buchstäblich mit den gespeicherten Kommandozeilen verglichen. Das
Suchmuster kann mit BACKSPACE schrittweise zurückgenommen
werden; das erste andere Editorkommando während der interaktiven
Eingabe des Suchmusters beendet die Suche. ( reverse-search-history)
- Kommando rückwärts suchen (C- p)
- sucht nach der
vollständigen Eingabe einer Zeichenkette die erste darauf passende
Kommandozeile in der History. (
non-incremental-reverse-search-history)
- Kommando inkrementell vorwärts suchen (C- s)
- sucht mit
jedem weiteren eingegebenen Buchstaben schrittweise (inkrementell)
vorwärts im Kommandozeilenspeicher von der aktuellen Zeile an nach
einer Kommandozeile mit einem bestimmtem Muster. Die Bearbeitung des
Musters erfolgt in der gleichen Weise wie beim
reverse-search-history-Editorkommando. (
forward-search-history)
- Kommando vorwärts suchen (M- n)
- sucht nach der Eingabe
einer Zeichenkette vorwärts in der History nach der ersten passenden
Kommandozeile. ( non-incremental-forward-search-history)
- Kommandozeile erweitern (M-C- e)
- führt die weiter unten
beschriebene History-Expansion im C-Shell-Stil und die
Synonymerweiterung aus, ohne die Kommandozeile auszuführen. Die
Zeile kann daraufhin weiter bearbeitet werden.
( expand-line)
- letztes Argument einfügen (M-., M-_)
- fügt das letzte Argument
des letzten Kommandos an der Einfügemarke ein.
( insert-last-argument)
- n-tes Argument einfügen (M-C- y)
- fügt das n-te Argument der
letzten Kommandozeile beim Cursor ein. Die Zahl wird als Argument
(siehe oben) dem Kommando vorangestellt, Defaultwert ist 1. (
yank-nth-arg)
- ausführen und nächstes Kommando (C- o)
- führt das mit den
Cursortasten in die Kommandozeile zurückgeholte Kommando aus und
gibt nach dessen Beendigung automatisch die auf die ausgeführte
Zeile folgende Zeile aus der History aus. ( operate-and-get-next)
Zusätzlich zu den oben beschriebenen Tastenfunktionen des Editors kann
der Kommandozeilenspeicher mit einem History-Mechanismus benutzt
werden, dessen Verwendung der C-Shell nachempfunden ist.
Diese
History-Expansion kann mit dem Shellkommando set +H
ausgeschaltet werden.
In der C-Shell ist es möglich, einzelne Wörter aus bestimmten
Kommandozeilen im Kommandozeilenspeicher in die aktuelle Kommandozeile
zu integrieren. Dazu wird zuerst eine Kommandozeile referenziert und
danach ein Wort in dieser Kommandozeile angesprochen.
Zum Auswählen einer Kommandozeile im Kommandozeilenspeicher gibt es
verschiedene Möglichkeiten. Prinzipiell leitet ein Ausrufezeichen
` !' die History-Substitution ein. Nur wenn das Ausrufezeichen
nach einem Fluchtsymbol `\
' steht oder von einem SPACE, RETURN, TAB, `=' oder ` (' gefolgt wird,
findet die Substitution nicht statt.
Anstelle des Ausrufezeichens kann in der Shellvariablen
histchars auch ein anderes Zeichen mit dieser Funktion belegt
werden.
- !!
- wählt die letzte Zeile im Kommandozeilenspeicher.
- !n
- wählt die Zeile Nummer n.
- !-n
- wählt die aktuelle Zeile minus n
- ! Zeichenkette
- wählt die letzte Kommandozeile, deren
Anfang mit der Zeichenkette übereinstimmt.
- !? Zeichenkette
[
? ]
- wählt die
letzte Kommandozeile, in der die Zeichenkette an irgendeiner
Position vorkommt.
- ^ Alt^Neu
- ist eine Abkürzung für
!!:s^Alt^Neu^
zur Ersetzung der Zeichenkette Alt durch
Neu in der letzten Kommandozeile. Diese Konstruktion muß
allein auf der Kommandozeile stehen.
- !#
- steht für die aktuelle Kommandozeile bis hier hin.
Auf die Kommandozeilenreferenz kann eine Wortreferenz folgen. Diese
Wortreferenz wird durch einen Doppelpunkt ` :' von der
Zeilenreferenz getrennt. Wenn die Wortreferenz mit einem `^
',
` $', ` *' oder ` %' beginnt, kann der Doppelpunkt
auch weggelassen werden. Die Wörter einer Kommandozeile sind vom
Zeilenanfang an mit Null beginnend numeriert.
- n
- bezeichnet das nte Wort. Das Wort 0 ist in
der Regel der Kommandoname.
- ^
- (Caret) steht für das erste Argument (das ist Wort Nummer
1).
- $
- bezeichnet das letzte Argument.
- %
- steht für das bei ? Zeichenkette ?
gefundene Wort.
- n-m
- ist der Bereich vom nten bis zum
mten Wort
- *
- steht für alle Argumente, also die Wörter 1-$. Wenn das
Kommando nur aus einem Wort besteht, wird die leere Zeichenkette
zurückgeliefert.
Nach (oder anstelle) der Wortreferenz können noch ein oder mehrere
Zeichen zur Modifikation des bezogenen Wortes folgen. Diese Zeichen
werden wieder durch Doppelpunkte getrennt.
- h
- schneidet alle Zeichen nach dem letzten Slash von dem
referenzierten Bereich der Kommandozeile ab. Die Funktion ist in
gewisser Weise mit dem dirname-Shellutility (-> Seite
) vergleichbar.
- r
- schneidet eine Endung der Form `.xxx' nach dem letzten Punkt
ab.
- e
- läßt nur die Endung in der oben beschriebenen Form übrig.
- t
- entfernt aus dem referenzierten Bereich der Kommandozeile
alles bis zum letzten Slash. Die Funktion ist dem basename-
Shellutility (-> Seite
) vergleichbar.
- p
- zeigt die entstandene Kommandozeile sofort an, ohne sie
auszuführen.
[
g]
s/ Alt/ Neu[
/]
-
ersetzt die Zeichenkette Alt bei
ihrem ersten Auftreten durch Neu. Durch den Zusatz g
kann erreicht werden, daß alle Vorkommen von Alt ersetzt
werden. Anstelle der Slashes können beliebige andere Zeichen benutzt
werden.
Auf den ersten Blick ist die C-Shell History-Funktion wahrscheinlich
etwas spröde. Die folgenden Beispiele zeigen einige Vorteile dieser
Funktion bei der täglichen Arbeit mit der C-Shell.
Häufig wird eine Datei in ein Verzeichnis verschoben und unmittelbar
anschließend das aktuelle Verzeichnis dorthin gewechselt.
$ mv broo.fazz.tar.gz /ftp/pub/comp/i386/Linux/utils/misc
$ cd !$
$ _
Mit ` !$' wird das letzte Wort der vorhergehenden Kommandozeile
eingefügt. Das gleiche Ergebnis wird auch durch die META -.-
Funktion des Kommandozeileneditors ausgeführt.
Gelegentlich braucht man nicht das komplette Argument, sondern nur
einen Teil davon:
$ less /usr/X386/include/X11/Xaw/SmeBSBP.h
$ find /usr/src/X11 -name !:t
find /usr/src/X11 -name SmeBSBP.h
find: /usr/src/X11: No such file or directory
$ _
Der Operator !:t liefert SmeBSBP.h.
Hier kann die Referenz auf das letzte Argument weggelassen werden,
weil die :t-Operation nur die Zeichen nach dem letzten Slash liefert.
Sehr nützlich ist auch die schnelle Substitution einer Zeichenfolge:
$ tar tvfz /ftp/pub/Incoming/das.ist.neu.tar.gz
[Ausgabe von tar]
$ ^tv^x
tar xfz /ftp/pub/Incoming/das.ist.neu.tar.gz
$ _
Hier werden die tar-Optionen tv durch x ausgetauscht.
Zuerst wird also der Inhalt des Archivs angezeigt, dann wird es im
nächsten Schritt ausgepackt. Mit dieser Methode lassen sich ebenso
leicht Tippfehler in der letzten Kommandozeile
verbessern.
Next: Anpassung des Kommandozeileneditors
Up: bash
Previous: Der Kommandozeileneditor