it-swarm.com.de

Bash-Verlaufssuche, teilweise + Pfeil nach oben

Ich habe gesucht, aber nichts gefunden. Ich suche eine Funktionalität in Bash, mit einem Terminal.

Vor langer Zeit hatte ich einen Benutzer auf einem Debian-System und ein Freund richtete mich mit einer praktischen Verlaufssuchfunktion ein (ich glaube, ich habe damals tcsh verwendet), bei der ich den Anfang eines vorherigen Befehls eintippte. 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 den Aufwärtspfeil, es würde mir zeigen: ./script.pl arg1. Drücken Sie erneut darauf und es wird ./script.pl usw. angezeigt.

Sehr ähnlich, als würde es grep für .bash_history ausführen. Gibt es eine Möglichkeit, diese Funktionalität zu erhalten?

143
TLP

Fügen Sie die folgenden Zeilen in Ihr ~/.inputrc ein:

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

Zeilen, die mit # beginnen, sind Kommentare. Ich kann mich nicht erinnern, was rückwärts und was vorwärts ist. Experimentiere damit. Möglicherweise müssen Sie vorwärts und rückwärts schalten.


Ein bisschen Hintergrundinformation:

Bash verwendet readline , um die Eingabeaufforderung zu verarbeiten. ~/.inputrc ist die Konfigurationsdatei für readline. Beachten Sie, dass dies auch in anderer Software mit der readline-Bibliothek wirksam wird, zum Beispiel IPython .

Lesen Sie das Bash-Handbuch , um weitere Informationen zu readline zu erhalten. Dort finden Sie auch weitere historienbezogene readline-Befehle .

So rufen Sie die Escape-Codes für die Pfeiltasten ab:

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

Erstellen Sie eine Datei mit dem Namen setup_readline.sh im 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. Meistens, wenn Sie Konfigurationsmanagementsysteme wie Chefkoch, Marionette usw. Verwenden

Und Systemkonfiguration noch unberührt!

30
user287613

Strg + R gibt Ihnen diese Art von Funktionalität. Beginnen Sie mit der Eingabe eines Teilbefehls, und es werden alte Befehle angezeigt, die Sie mit den Aufwärts- und Abwärtspfeilen navigieren können. Weitere Informationen: http://www.nuxified.org/blog/ctrl_r_in_the_bash_Shell

12
Andrew Moss

Um die Antwort von Lesmana zu "~/.inputrc", die ich unter Trusty 14.04 erstellen soll, zu vervollständigen, verifizieren Sie "~/.bashrc" (die erste Zeile ist bereits in meinem "~/.bashrc" vorhanden):

shopt -s histappend  
Prompt_COMMAND='history -a'  

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

4
bcag2

Vielleicht möchten Sie versuchen https://github.com/dvorka/hstr , das eine einfache und mehrzeilige Filterung des Bash-Verlaufs bietet, die auf Metriken basiert (wann, wie oft und in welcher Länge) Befehle zählt) - Sie können die Pfeiltasten verwenden, um einfach im Verlauf zu navigieren:

enter image description here

Es kann leicht gebunden sein Ctrl-r und/oder Ctrl-s

2
Martin Dvorak

Die folgende Lösung kombiniert und erweitert einige der oben genannten Ansätze: Fügen Sie die folgenden Zeilen zu Ihrer ~/.bash_aliases -Datei hinzu (~/.inputrc ist nicht erforderlich), um das folgende Verhalten zu erzielen:

  1. bewegen Sie sich im Verlauf nach oben/unten (nur Einträge mit demselben Präfix), indem Sie STRG + NACH OBEN und STRG + NACH UNTEN drücken. Dies kann neben der Standardfunktionalität des Aufwärts-/Abwärtsbewegens in der gesamten Historie allein über UP und DOWN existieren
  2. zum nächsten/vorherigen Wort in einer Befehlszeile springen, indem Sie STRG + RECHTS und STRG + LINKS drücken
bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-Word'
bind '"\e[1;5D":backward-Word'

Melden Sie sich erneut bei der Shell an (oder führen Sie source ./bash_aliases aus), um die Änderungen zu übernehmen.

0
user27164