In Bash der history
command ist der Schlüssel, um nicht nur zu verstehen, was Sie während Ihrer Shell-Sitzung getan haben, sondern auch um Rohmaterial für neue Befehle zu erhalten, die Sie in Zukunft ausführen möchten. history
ist besonders nützlich, wenn Sie einen Headless-Server betreiben. Wenn Sie keine Maus haben, können Sie die letzte Hälfte eines komplexen Befehls nicht einfach kopieren und einfügen, um eine leicht modifizierte Version davon auszuführen, also müssen Sie das Ganze noch einmal eingeben - es sei denn, Sie verwenden history
Modifikatoren.
Halten Sie den Verlauf aus Ihrem Verlauf heraus
Bevor wir den Verlauf besprechen, hier ein Tipp, wie Sie den history
wörtlich führen können Einträge aus Ihrem Verlauf.
Das Problem bei der Verwendung des history
Befehl, um Ihren history
zu überprüfen ist, dass es einen Eintrag zu Ihrem history
hinzufügt Datei. Diese Einträge überladen nicht nur Ihren history
, aber sie bewirken auch, dass sich jede Linie "weiter" von Ihrer aktuellen Position entfernt.
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$
Ein sich bewegendes Ziel ist schwer zu verfolgen und schwer zu treffen, wenn Sie also vorhaben, ernsthaft Ihre history
zu verwenden Um Ihre Bash-Interaktionen zu beschleunigen, fügen Sie diese Konfiguration zu Ihrer .bashrc
hinzu Datei:
export HISTCONTROL=$HISTCONTROL:ignorespace
Diese Konfiguration verhindert, dass Befehle, denen ein Leerzeichen vorangestellt ist, zu Ihrem history
von Bash hinzugefügt werden .
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
$
[ Kostenloser Online-Kurs:Technischer Überblick über Red Hat Enterprise Linux. ]
Verlaufsereignisse
Die Grundstruktur der history
der Shell beginnt mit einer Liste von events
. Ein event
ist alles, was Sie in die Shell eingegeben haben, gefolgt von Return
oder Enter
Schlüssel. Jedes event
wird eine Indexnummer (eine Zeilennummer) zugewiesen, und Sie können Ereignisse anzeigen und abrufen, indem Sie event designators
verwenden .
Zum Beispiel, um ein bestimmtes Zeilenelement in Ihrem Shell-history
abzurufen , verwenden Sie ein Ausrufezeichen (!
) unmittelbar gefolgt von der Nummer des history
Zeile:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Sie können auch auf vergangene Befehle relativ zu ihrer Position im history
verweisen Auflistung. Zum Beispiel, um den Befehl two auszuführen Zeilen in der Vergangenheit, stellen Sie sich Ihre aktuelle Eingabeaufforderung als eine Zeile größer als die letzte Zeile im history
vor , und subtrahieren Sie dann die Nummer der Zeile, die Sie ausführen möchten, von Ihrer aktuellen Zeilennummer. In diesem Beispiel Zeile 103 ist die Ziellinie und 105 ist die aktuelle Eingabeaufforderung (für ein Delta von 105-103=2 ):
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Sie können ein ganzes Zeichen speichern, wenn Sie nur die letzte Zeile wiederholen möchten. Der Ausdruck !!
und !-1
sind synonym:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Beachten Sie, dass der Befehl selbst in der Ausgabe wiederholt wird, wenn history
wird wiederholt. Aus Gründen der Kürze und Klarheit wird eine solche Ausgabe von den verbleibenden Beispielen in diesem Artikel ausgeschlossen.
Wortbezeichner
Bash hat Funktionen, die Ihnen helfen, Ihren history
zu parsen mit word designators
, und Tools, mit denen Sie die Befehle in Ihrem history
ändern können . Es könnte hilfreich sein, an Ihre Shell-history
zu denken als indiziertes Array oder sogar als großes Verlaufsobjekt, das aus vielen kleineren Elementen besteht. Jedes Wort in jeder Zeile Ihres history
ist indiziert und beginnt bei 0 (was normalerweise der Befehl ist, aber mehrteilige Befehle und Präfixe von Umgebungsvariablen sind bemerkenswerte Ausnahmen). Sie können auf jeden Index zugreifen, indem Sie einen Doppelpunkt hinzufügen (:
) zu Ihrer Zeilenreferenz, unmittelbar gefolgt von der word designator
.
Hier ist ein Beispiel für den Zugriff auf das erste Wort:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Da das Ergreifen des ersten Arguments üblich ist, wird der Zirkumflex (oder der „Hut“):^
) ist ein Alias für :1
.
$ echo foo
$ !!^
foo
Am anderen Ende des Spektrums steht der Dollar ($
) Zeichen stellt das letzte Argument dar:
$ echo foo bar baz
$ echo !!$
baz
Wortbereiche
Sie müssen sich nicht mit nur einem Argument zufriedengeben. Sie können auch Bereiche eines Indexes extrahieren. Alle Argumente außer dem nullten sind mit einem Sternchen verfügbar (*
).
$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz
Dies ist eigentlich ein Synonym für 1-$
(d. h. das erste Argument zum letzten Argument). Wie zu erwarten, können Sie Ihren Bereich mit dieser ungekürzten Schreibweise beliebig definieren. Dieses Beispiel verweist auf das zweite bis fünfte Argument und ignoriert das erste und die letzten beiden Argumente:
$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh* baz foo rev.bin* spacer.sh* sync.py*
Wenn Sie nur das letzte einzelne Wort in einem Index ausschließen müssen, können Sie einen Bereich ohne Terminierung angeben:
$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh* foo spacer.sh*
Verwendung des Verlaufs für Geschwindigkeit und Präzision
Der history
Bei einem Befehl geht es nicht immer darum, Tastendrücke zu reduzieren. Sie können Ihren Bash-history
verwenden um zu vermeiden, versehentlich eine Datei oder einen Ordner von einem wichtigen Vorgang auszuschließen oder einen Dateinamen falsch zu schreiben. Machen Sie sich mit dem history
vertraut Befehl für robustere Bash-Interaktionen.
[ Möchten Sie Red Hat Enterprise Linux ausprobieren? Laden Sie es jetzt kostenlos herunter. ]