Ich habe gesucht, aber nichts dazu gefunden. Ich suche nach einer Funktionalität in Bash, die ein Terminal verwendet.
Vor langer Zeit hatte ich einen Benutzer auf einem Debian-System und ein Freund richtete mir eine praktische Verlaufssuchfunktion ein (ich glaube, ich habe damals tcsh verwendet), wo ich den Anfang eines vorherigen Befehls eingab, die Pfeiltaste nach oben drückte und eine Suche basierend auf der Teilzeichenfolge durchführte.
Wenn meine Historie beispielsweise folgendermaßen aussieht:
./script.pl
./script.pl arg1
cat output
cat output | grep yada
Und wenn ich eingebe .
und die Pfeiltaste nach oben drücke, wird Folgendes angezeigt: ./script.pl arg1
. Wenn ich noch einmal drücke, wird Folgendes angezeigt ./script.pl
usw.
Ganz ähnlich, als würde es ein grep
on .bash_history ausführen. Gibt es eine Möglichkeit, diese Funktionalität zu erhalten?
Antwort1
Erstellen ~/.inputrc
und fügen Sie diese Zeilen hinzu:
# Respect default shortcuts.
$include /etc/inputrc
## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward
TIPP:Unten finden Sie eine Erklärung dazu
$include /etc/inputrc
und erfahren, was zu tun ist, wenn Sie die Datei bereits haben~/.inputrc
.
Mit beginnende Zeilen #
sind Kommentare.
Ich kann mir nicht merken, was rückwärts und was vorwärts ist. Experimentiere damit. Vielleicht musst du vorwärts und rückwärts wechseln.
Schließen und öffnen Sie alle Terminals erneut, damit das neue Verhalten wirksam wird.
Ein paar Hintergrundinformationen:
Bash verwendetZeile lesenum die Eingabeaufforderung zu verarbeiten. ~/.inputrc
ist die Konfigurationsdatei für readline. Beachten Sie, dass dies auch in anderer Software, die die Readline-Bibliothek verwendet, wirksam ist, beispielsweiseIPython.
Lies dasBash-Handbuchfür weitere Informationen zu readline. Dort finden Sie auch weitereVerlaufsbezogene Readline-Befehle.
Um die Escape-Codes für die Pfeiltasten zu erhalten, können Sie Folgendes tun:
- Starten Sie
cat
in einem Terminal (nurcat
, keine weiteren Argumente). - Geben Sie Tasten auf der Tastatur ein. Sie erhalten beispielsweise die Pfeiltasten
^[[A
nach oben und^[[B
unten. - Ersetzen
^[
mit\e
.
Weitere Informationen dazu ^[
finden \e
Sie hier:https://unix.stackexchange.com/a/89817/380515
Über die Linie $include /etc/inputrc
:
Readline versucht, ~/.inputrc
die Konfiguration zu lesen. Wenn die Datei nicht existiert, wird versucht, sie zu lesen /etc/inputrc
. Das heißt, wenn sie ~/.inputrc
existiert, wird sie nicht gelesen /etc/inputrc
.
Einige Distributionen haben eine Konfiguration in vorbereitet /etc/inputrc
. Wenn Sie dann erstellen, ~/.inputrc
geht die vorbereitete Konfiguration verloren. Dies kann Ihren Wünschen entsprechen, muss es aber nicht. Um die vorbereitete Konfiguration dennoch beizubehalten, /etc/inputrc
können Sie die Zeile $include /etc/inputrc
in Ihrem verwenden ~/.inputrc
.
Wenn Sie die Datei bereits haben, ~/.inputrc
bedeutet das, dass Sie entweder bereits wissen, was Sie tun. Oder Sie haben sie von der Person geerbt, die Ihr System eingerichtet hat. Oder Sie sind zuvor einer anderen Anleitung gefolgt, in der Sie aufgefordert wurden, die Datei zu erstellen, und haben es vergessen. In jedem Fall sollten Sie dies überprüfen /etc/inputrc
und entscheiden, ob Sie sie bei der Zeile behalten möchten $include /etc/inputrc
.
Antwort2
Erstellen Sie eine Datei namens setup_readline.sh mit Modus 644 in /etc/profile.d/ mit folgendem Inhalt, melden Sie sich an und überprüfen Sie Ihre bevorzugten Schlüssel:
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
Ich denke, das ist der beste Weg, dies zu tun. Vor allem, wenn Sie Konfigurationsmanagementsysteme wie Chef, Puppet usw. verwenden
Und die Systemkonfiguration ist noch unberührt!
Antwort3
Ctrl + Rbietet Ihnen diese Art von Funktionalität. Beginnen Sie mit der Eingabe eines Teilbefehls und es werden alte Befehle angezeigt, in denen Sie mit den Auf- und Ab-Pfeilen navigieren können.
Mehr InfoHier.
Antwort4
Um die Antwort von lesmana diesbezüglich zu vervollständigen ~/.inputrc
, sollte ich unter meinem Trusty 14.04 Folgendes erstellen und überprüfen/hinzufügen ~/.bashrc
(die erste Zeile existiert bereits in meinem ~/.bashrc
):
shopt -s histappend
PROMPT_COMMAND='history -a'
Es ist bereits auf Französisch erklärtHier.