Bash-Verlaufssuche, teilweise + Pfeil nach oben

Bash-Verlaufssuche, teilweise + Pfeil nach oben

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.plusw.

Ganz ähnlich, als würde es ein grepon .bash_history ausführen. Gibt es eine Möglichkeit, diese Funktionalität zu erhalten?

Antwort1

Erstellen ~/.inputrcund 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/inputrcund 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. ~/.inputrcist 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:

  1. Starten Sie catin einem Terminal (nur cat, keine weiteren Argumente).
  2. Geben Sie Tasten auf der Tastatur ein. Sie erhalten beispielsweise die Pfeiltasten ^[[Anach oben und ^[[Bunten.
  3. Ersetzen ^[mit \e.

Weitere Informationen dazu ^[finden \eSie hier:https://unix.stackexchange.com/a/89817/380515


Über die Linie $include /etc/inputrc:

Readline versucht, ~/.inputrcdie Konfiguration zu lesen. Wenn die Datei nicht existiert, wird versucht, sie zu lesen /etc/inputrc. Das heißt, wenn sie ~/.inputrcexistiert, wird sie nicht gelesen /etc/inputrc.

Einige Distributionen haben eine Konfiguration in vorbereitet /etc/inputrc. Wenn Sie dann erstellen, ~/.inputrcgeht die vorbereitete Konfiguration verloren. Dies kann Ihren Wünschen entsprechen, muss es aber nicht. Um die vorbereitete Konfiguration dennoch beizubehalten, /etc/inputrckönnen Sie die Zeile $include /etc/inputrcin Ihrem verwenden ~/.inputrc.

Wenn Sie die Datei bereits haben, ~/.inputrcbedeutet 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/inputrcund 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.

verwandte Informationen