Frage Bash History Suche, Partial + Pfeil nach oben


Ich habe gesucht, aber nichts dazu gefunden. Ich suche nach einer Funktionalität in bash, mit einem Terminal.

Damals, als ich einen Benutzer auf einem Debian-System hatte und ein Freund mich mit einer bequemen History-Suchfunktion einrichtete (ich glaube, ich benutzte tcsh dann), wo ich den Anfang eines vorherigen Befehls eingeben würde, den Pfeil nach oben drücken, und es würde eine Suche basierend auf der Teilzeichenfolge durchführen.

Z.B. wenn meine Geschichte ist:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

Und ich tippe ., und drücke auf den Pfeil, es würde mir zeigen: ./script.pl arg1. Drücken Sie es erneut und es würde zeigen ./script.pl, etc.

Sehr ähnlich wie es ein durchführen würde grep auf .bash_history. Gibt es eine Möglichkeit, diese Funktionalität zu erhalten?


121
2017-09-03 12:11


Ursprung


mögliches Duplikat von iPython wie Befehlshistorie für Shell - Marcel Stimberg
@Marcel Sieht so aus, als ob es die selbe Antwort sein könnte, das habe ich bei der Suche gesehen, aber nicht mit meiner Frage, mit den iPython und Shell Keywords. - TLP


Antworten:


Setzen Sie die folgenden Zeilen in Ihre ~/.inputrc:

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

Zeilen beginnend mit # sind Kommentare. Ich kann mich nicht erinnern, was rückwärts und was vorwärts ist. Experimentiere damit. Vielleicht musst du vor- und zurückschalten.


Ein bisschen Hintergrundinformation:

Bash benutzt Zeile lesen um die Aufforderung zu bearbeiten. ~/.inputrc ist die Konfigurationsdatei für readline. Beachten Sie, dass dies auch in anderen Programmen, z. B. in der readline-Bibliothek, wirksam wird IPython.

Lies das Bash Handbuch für weitere Informationen über Readline. Dort finden Sie auch mehr Geschichte bezogene readline Befehle.

Um die Escape-Codes für die Pfeiltasten zu erhalten, können Sie Folgendes tun:

  1. Anfang cat in einem Terminal (nur cat, keine weiteren Argumente).
  2. Geben Sie Tasten auf der Tastatur ein, Sie erhalten Dinge wie ^[[A für nach oben und nach unten ^[[B für den Abwärtspfeil.
  3. Ersetzen ^[ mit \e.

171
2017-09-03 13:31



Großartig, aber diese Lösung deaktiviert die Ctrl-Links / Ctrl-Rechts-Shortcuts. - Eyal
Kann mir jemand sagen wie ich das selbe machen kann - Hitesh Kumar
@lesmana, ich würde extra Punkte für den Katzenteil geben - Mike D
@Eyal, jemand hat Ratschläge, wie ich das haben kann, aber Strg-Linke / Strg-Rechts-Shortcuts beibehalten? - kbrose
Ich habe es herausgefunden, irgendwie muss readline auf einen Standard geschlossen haben, wenn .inputrc nicht existierte, aber diese Standardwerte wurden beseitigt, als die Datei gefunden wurde. Fügen Sie zusätzlich zu den Verknüpfungen aus der Antwort Zeilen hinzu, um die Tastenkombinationen ctrl-left / ctrl-right beizubehalten: z. "\e[1;5C":forward-word und "\e[1;5D":backward-word - kbrose


Erstellen Sie eine Datei namens setup_readline.sh mit dem Modus 644 in /etc/profile.d/ mit folgendem Inhalt, loggen Sie sich ein 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. Meistens, wenn Sie Konfigurationsverwaltungssysteme wie Koch, Puppe, etc

Und Systemkonfiguration noch unberührt!


23
2018-06-02 07:58



Seltsamerweise funktionierte das ~ / inputrc nicht für mich - aber diese Befehle in .bash_profile zu setzen. - Joe
.inputrc existiert nicht in meinem Home-Ordner und ich bevorzuge diese Art von Einstellungen in .bashrc sowieso, so kann ich nur eine Datei für meine Einstellungen herumtragen. Das ist wahrscheinlich eine bessere Antwort als angenommen. - ShitalShah
.inputrc funktioniert fabelhaft für mich, aber nicht nachdem ich geladen habe screen. Die seltsame Sache ist, andere .inputrc Abkürzungen arbeiten, aber nicht diese. Also benutze ich jetzt beide Lösungen. - Orwellophile
Dies ist sehr hilfreich, wenn Sie sich zum Beispiel bei einem Server anmelden, um Dinge zu tun, und denen die Hölle fehlt, und die ~ / .inputrc auf dem Server nicht bearbeiten und neu laden wollen. - danmactough


Strg + R gibt Ihnen diese Art von Funktionalität. Beginnen Sie mit der Eingabe eines Teilbefehls und es werden alte angezeigt, mit denen Sie mit den Auf- und Abwärtspfeilen navigieren können. Mehr Info: http://www.nuxified.org/blog/ctrl_r_in_the_bash_shell


13
2017-09-03 12:17



Danke für deine Antwort. Ja, ich habe es versucht, aber ich finde es ein bisschen ... knifflig. Es wird mir nicht erlauben, durch Befehle zu scrollen, die mit dem Partiellen beginnen, es zeigt nur das Erste. Es durchsucht auch den gesamten Befehl nach dem Charakter, was irgendwie nutzlos ist. - TLP
@ TLP, wiederhole das Schlagen Ctrl+r - akostadinov


Um lesmanas Antwort bezüglich "~ / .inputrc" zu vervollständigen, die ich unter meinem Trusty 12.04 erstellen sollte, verifiziere / füge "~ / .bashrc" hinzu (die erste Zeile existiert bereits in meinem "~ / .bashrc"):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

Es ist bereits in Französisch in erklärt https://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historique.


4
2017-10-14 08:31



Dieser Befehl weist bash grundsätzlich an, den Befehl sofort an die Protokolldatei anzuhängen, anstatt darauf zu warten, dass die Sitzung beendet wird. Es ist nützlich, wenn Sie viele Terminals geöffnet haben und nicht Geschichte in einem verlieren wollen, aber sonst nicht notwendig. digitalocean.com/community/tutorials/... - ShitalShah
Neben dem Punkt, aber Trusty ist 14.04. 12.04 ist präzise. - wjandrea


Vielleicht möchten Sie es vielleicht versuchen https://github.com/dvorka/hstr Mit dieser einfachen und mehrzeiligen einfachen Filterung der Bash-Historie, die auf einer Metrik basiert (wann, wie oft und wie lang die Befehle sind), können Sie mit Hilfe der Pfeiltasten einfach durch den Verlauf navigieren:

enter image description here

Es kann leicht sein gebunden zu Strg-r und / oder Strg-s


0
2017-08-28 22:01