Suchen im Historybuffer

In vielen Situationen erinnert sich der Anwender, daß er zuvor bereits einmal eine bestimmte Befehlszeile ausgeführt hat, weiß aber oft nicht mehr, wann das war. Und gerade diese Befehlszeile wäre jetzt so nützlich! In diesem Fall hat er die Möglichkeit, den Historybuffer zu durchsuchen. Dazu stellt die Bash ihm mehrere Funkionen zur Verfügung.

Die am meisten verwendete Methode wird als inkrementale Suche bezeichnet. Bei dieser Form der Suche zeigt die Bash immer das Ergebnis automatisch an, ohne daß dazu eine weitere Bestätigung notwendig wäre. Die Tastenkombination [Control-r] aktiviert die dabei eingesetzte Funktion reverse-search-history. Ein Beispiel zeigt den Einsatz dieser Funktion. Würde in der oben gezeigten History nach der Befehlszeile nach der Zeile mit dem Befehl xemacs gesucht werden, so reicht es aus, x einzugeben.

$> [Control-r]
(reverse-i-search)`x': xemacs

Die letzte der beiden kill-Zeilen wird durch Eingabe eines k gefunden. Gäben Sie aber statt dessen ein i ein, landen Sie in der wipe-Zeile. Von hier können Sie durch einen weiteren Buchstaben l weiter rückwärts durch den Historybuffer streifen.

$> [Control-r]
(reverse-i-search)`i': wipe ~/del_me
(reverse-i-search)`il': kill -1 1321

Auf diese Weise wird die Zielzeile durch jedes zusätzliche Zeichen genauer spezifiziert. Sobald die richtige Zeile dargestellt wird, können Sie die Suche mit [ESC] beenden, die angezeigte Befehlszeile mit [Return] ausführen, durch [Control-a] an den Anfang oder mit [Control-e] an deren Ende springen. Wie findet man aber Zeilen, die sich wie die kill-Zeilen nur in wenigen Zeichen voneinander unterscheiden? Hier greift der Vorteil der inkrementalen Suche erst sehr spät. Daher gibt es die Möglichkeit, bei der inkrementalen Suche eine angezeigte Zeile durch erneute Eingabe von [Control-r] zu überspringen, ohne daß die bereits eingegebenen Suchzeichen verloren gehen.

$> [Control-r]
(reverse-i-search)`il': kill -1 1321
[Control-r]
(reverse-i-search)`il': kill -HUB 1325

In die Gegenrichtung (zum Ende des Historybuffers hin) wird die Funktion forward-search-history eingesetzt, die gewöhnlich an die Tastenkombination [Control-s] gebunden ist. Dabei tritt bei vielen Terminals ein Problem auf: durch [Control-s] wird voreinstellungsgemäß das Terminal gesperrt. Mit dem Befehl stty (Set Tele Typewriter) kann diese Voreinstellung aber angezeigt und leicht modifiziert werden:

$> stty -a  
speed 9600 baud; rows 77; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undefiniert>;
eol2 = <undefiniert>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke   

Die problematische Einstellung wurde fett hervorgehoben. Eine einfache Rekonfiguration reicht aus, um derartige Probleme zu beheben:

$> stty stop ^p  
$> stty stop ^Q  

Die erste Zeile sollte bei allen Terminals funktionieren. Nach dem Ausführen dieser Befehlszeile sollte über [Control-s] die Suchfunktion zur Verfügung stehen (erkennbar an der Ausgabe von (i-search)`': unter der Befehlszeile) und die Terminalausgabe wird nun durch [Control-p] angehalten. Bei einigen Terminals kann mit der zweiten Variante eine Umschaltfunktion durch [Control-q] realisiert werden. Erfolgt eine Terminalausgabe, dann stoppt [Control-q] diese. Ein erneutes Eingeben dieser Tastenkombination startet die Ausgabe wieder. Die entsprechende Befehlszeile sollte beim Aufruf der Bash automatisch ausgeführt werden. In einem der nächsten Teile werden wir dazu verschiedene Möglichkeiten vorstellen. Hier zunächst nur soviel: fügen Sie die Befehlszeile am Ende der Dateien .bashrc,.bash_profile oder .bash_login ein, je nach dem, welche Dateien vorhanden sind.

Die nicht-inkrementalen Suchfunktionen werden bei der Bash selten verwendet. Sie sind daher oft gar nicht an Tasten gebunden. Sie funktionieren wie gewohnt: die Suche beginnt erst nach der Eingabe eines Suchbegriffs. Eine Ausnahme gibt es: Mit der Funktion character-search springt der Cursor zum nächsten Auftreten des Zeichens in der Befehlszeile, auf dem er momentan steht. Diese Funktion ist gewöhnlich an [Control-]] gebunden. In die Gegenrichtung sucht man durch [Meta-Control-]].

Der history-Befehl

Für die Verwaltung des Historybuffers und der History-Datei verfügt die Bash über einen eingebauten Befehl mit dem Namen history. Mit ihm werden alle wichtigen Aktionen ausgelöst bzw. gesteuert. Optionen steuern wie üblich die Funktionalität des Befehls, ohne Optionen und Argument listet er den aktuellen Inhalt des Historybuffers:

$> history … 939  less ~/.bash_history 940  stty -a 941  stty stop ^Q 942  stty stop ^p 943  man readline 944  latex bash-history          …

Folgt dem Befehl ein numerisches Argument (eine Zahl), dann bestimmt diese, wieviele Zeilen ausgegeben werden.

$> history 3   
 942  stty stop ^p
943  man readline
 944  latex bash-history

Weitere Optionen:

  • -a(append): Hängt die seit Sitzungsbeginn neuen Zeilen an die History-Datei an.
  • -c(clear): Durch diese Option wird der Historybuffer gelöscht.
  • -n(new lines): Liest bisher noch nicht eingelesene Zeilen aus der History-Datei in den Historybuffer ein.
  • -r(read history file): Liest die History-Datei erneut in den Historybuffer ein.
  • -w(write history file): Schreibt den Inhalt des Historybuffers in die History-Datei. Diese Datei wird dabei überschrieben. (Bei dieser Form werden keine Zeilennummern erzeugt.) Voreingestellt ist das Speichern in der Datei .bash-history. Folgt der Option aber ein Dateiname, so erfolgt die Ausgabe in die angegebene Datei.
  • -p(perform): Führt eine History-Ersetzung (siehe unten) für die folgende Befehlszeile aus. Das Ergebnis wird nicht in der History-Datei gespeichert.
  • -s(store): Speichert die folgende Befehlszeile als ein Eintrag in der History-Datei. Zuvor wird der letzte Eintrag entfernt.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Hardcore-Linux
    In diesem ersten Teil einer Serie über die Bash verraten wir Ihnen erste Geheimnisse beim Umgang mit dem Befehlszeileninterpreter. Probieren Sie alles aus! Nur so kann man das erlernte Wissen behalten und vertiefen.
  • Bash-Konfiguration, die zweite
    In diesem zweiten Teil der Serie über die Konfiguration der Bash wird es noch einmal praktisch: Das Einstellen des Prompts, und die für die Fehlersuche so nützlichen Tracing-Modi werden beschrieben.
  • Bash-Kurs Teil 6
    Die elementaren Konfigurationsmöglichkeiten mit eingebauten Funktionen der Bash sind der Schwerpunkt dieses Teils. Im nächsten wird ein komfortables Tool zur Erzeugung von Konfigurationsdateien vorgestellt.
  • Teil 1: Grundlagen der BASH
    Haben Sie auch schon einmal am Computer gesessen und sich über immer wiederkehrende Arbeit geärgert, die man mit einem kleinen Programm vereinfachen könnte? Im ersten Teil unseres Programming Corners steigen wir in die Welt der Programmierung ein.
  • Die Bash, das unbekannte Wesen
    Es gibt neben den Pipes noch verschiedene andere Verfahren, um mehrere Shell-Befehle miteinander zu verbinden bzw. sie parallel auszuführen. Die wichtigsten Methoden werden in dieser Folge der Bash-Serie vorgestellt.
Kommentare

Infos zur Publikation

LU 11/2017: Server für Daheim

Digitale Ausgabe: Preis € 8,50
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Lieber Linux oder Windows- Betriebssystem?
Sina Kaul, 13.10.2017 16:17, 3 Antworten
Hallo, bis jetzt hatte ich immer nur mit
IT-Kurse
Alice Trader, 26.09.2017 11:35, 2 Antworten
Hallo liebe Community, ich brauche Hilfe und bin sehr verzweifelt. Ih bin noch sehr neu in eure...
Backup mit KUP unter Suse 42.3
Horst Schwarz, 24.09.2017 13:16, 3 Antworten
Ich möchte auch wieder unter Suse 42.3 mit Kup meine Backup durchführen. Eine Installationsmöglic...
kein foto, etc. upload möglich, wo liegt mein fehler?
kerstin brums, 17.09.2017 22:08, 5 Antworten
moin, zum erstellen einer einfachen wordpress website kann ich keine fotos uploaden. vom rechne...
Arch Linux Netzwerkkonfigurationen
Franziska Schley, 15.09.2017 18:04, 0 Antworten
Moin liebe Linux community, ich habe momentan Probleme mit der Einstellung des Lan/Wlan in Arc...