
Gibt es eine bessere Möglichkeit, meine Verlaufsdatei nach einem Befehl zu durchsuchen als grep? Ich habe zwar eine ungefähre Vorstellung davon, wie der Befehl beginnt, aber ich weiß nicht, wie weit er im Verlauf zurückliegt.
aktualisieren:war früher zsh-spezifisch, aber aufgrund überlappender Antworten können Sie hier gerne für jede Shell (oder jeden Modus (vi/emacs)) antworten. Geben Sie einfach an, ob es spezifisch ist.
Antwort1
Ctrl+ Rist in der Regel der beste Weg, daDeskriptor sagte. Sie können auch verwenden !string
, wodurch der letzte Befehl ausgeführt wird, der mit beginnt string
, oder !?string?
, wodurch der letzte Befehl ausgeführt wird, der enthält string
.
(Ich denke, das ist das einzige, was für diese Frage relevant ist, aber ich habe viel mehr der Verlaufsbefehle indiese Antwort)
Antwort2
Wenn Sie Bash verwenden, geben Sie Control- ein Rund beginnen Sie dann mit der Eingabe. Wenn Sie nach der Texteingabe wiederholt Control- Reingeben, gelangen Sie zurück zu den entsprechenden Befehlszeilen.
Antwort3
Wenn Sie Folgendes hinzufügen zu~/.inputrc
"\e[5~": history-search-backward
"\e[6~": history-search-forward
und Bash neu starten. Sie können mit der Eingabe beginnen und dann Page Upund verwenden Page Down, um sich vorwärts und rückwärts durch den Verlauf der Zeilen zu bewegen, die mit demselben Präfix beginnen, das Sie gerade eingegeben haben.
(Manche bevorzugen möglicherweise die Verwendung von \e[A
und , wodurch die normalen Aktionen und \e[B
ersetzt werden, anstatt neue Tasten zu binden.)UpDown
Antwort4
Die interaktive Eingabeaufforderung, die durch Ctrl- aufgerufen wird R, wie bereits erwähnt, ist der bequemste Weg. Darüber hinaus ist es beliebt, die UpPfeiltasten neu zu belegen Down, um den Verlauf nach einem Präfix zu durchsuchen, das sich derzeit in der Befehlszeile befindet. Dies erfordert jedoch einigeÄnderungen an der ~/.inputrc
Datei.
Die klassische und weniger interaktive Lösung ist die Verwendung der Shell-History-Erweiterung.
!foo
führt den letzten Befehl aus, der mit foo
und beginnt
!?foo
führt den letzten Befehl aus, der enthält foo
. Weitere Informationen zur Verlaufserweiterung finden Sie imBash-Referenzhandbuch, vorausgesetzt, Ihre Shell ist Bash oder kompatibel.