Wie durchsuche ich meinen Befehlszeilenverlauf nach Befehlen, die ich zuvor verwendet habe?

143

Gibt es außer dem Anzeigen des Verlaufs eine Möglichkeit, meinen Verlauf zu filtern?

Angenommen, ich möchte nach einem Befehl suchen, der mit "ssh" gestartet wurde?

    
Blankman 02.11.2011, 02:25
quelle

9 Antworten

226

Drücken Sie Strg + R und geben Sie ssh ein. Strg + R startet die Suche vom letzten Befehl zum alten (Rückwärtssuche). Wenn Sie mehr als einen Befehl haben, der mit ssh beginnt, drücken Sie Strg + R immer wieder, bis Sie die Übereinstimmung finden.

Sobald Sie die Übereinstimmung gefunden haben, können Sie Enter drücken, um den Befehl auszuführen, oder den linken / rechten Cursor, um nur den Text des Befehls auszuwählen.

Es gibt keine Standardumkehroption für Strg + R , um die Suchrichtung umzukehren, aber hier finden Sie einige Vorschläge dazu.

    
Prince John Wesley 02.11.2011, 02:32
quelle
74

Wenn Sie nur Ihren Verlauf durchsuchen möchten, können Sie einfach history | grep ssh verwenden, indem Sie ssh für alles, was Sie suchen möchten, ersetzen.

    
ssmy 02.11.2011 02:36
quelle
12

Wenn Sie Strg + R drücken, wird der Modus "reverse-i-search" gestartet. Wenn Sie "ssh" eingeben, wird Ihr Verlauf nach Befehlen mit "ssh" durchsucht.

    
Sergey 02.11.2011 02:33
quelle
12

Ich mache eine leichte Variation des oben genannten, funktioniert gut für mich (wenn Sie sich auf Ihre Bash-Geschichte beziehen

In meinem Home-Ordner erstelle ich eine Datei namens

.inputrc

Inside geht das

"\e[5~": history-search-backward
"\e[6~": history-search-forward

Hinweis: Das obige scheint in 14.04 nicht mehr zu funktionieren, also macht das das gleiche -

"\e[A":history-search-backward
"\e[B":history-search-forward

Dann tippe doch viel von einem vorherigen Befehl ich wünsche & amp; Mit den Page Up / Page dn Tasten durchsuchen Sie den Verlauf, immer beginnend mit der Seite nach oben

    
doug 02.11.2011 02:42
quelle
5

Hier ist eine andere Methode, die klassische Befehle verwendet (die wahrscheinlich über Distros hinweg funktionieren). Die Befehlshistorie wird in der Datei .bash_history in Ihrem Home-Verzeichnis gespeichert. Sie können dies tun:

grep "ssh" ~/.bash_history

Vergessen Sie nicht das -i -Flag, wenn Sie die Groß- und Kleinschreibung nicht beachten müssen.

    
DisgruntledGoat 02.11.2011 10:49
quelle
2

Ich habe die folgende Funktion irgendwo im Internet gefunden und habe sie sehr gut genutzt. Setzen Sie dies in Ihre ~/.bashrc :

hgrep () { 
    history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}

Lade deine Shell neu: exec bash . Sie haben jetzt einen neuen Befehl, den Sie wie folgt verwenden können:

hgrep ssh

Es zeigt Ihnen eine Liste der passenden Befehle aus Ihrem Verlauf. Um einen Befehl auszuführen, geben Sie ! gefolgt von der Befehlsnummer ein. Hier ist ein Beispiel:

~:$ hgrep scp
  207  tn scp foreign-teachers __HOST__:unity.log __HOST__:compiz.log .
  421  tn scp scott-laptop __HOST__:Scott\ Severance.asc .
  422  tn scp scott-laptop __HOST__:'Scott\ Severance.asc' .
  468  tn scott-desktop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
  469  tn scott-laptop scp -r Backgrounds/* __HOST__:Pictures/Backgrounds
  470  scp -r Backgrounds/* 192.168.1.2:Pictures/Backgrounds
~:$ !207

Ich mag diesen Ansatz besser als Strg + R , weil er viel flexiblere Suchvorgänge ermöglicht und mehrere Ergebnisse gleichzeitig angezeigt werden können.

    
Scott Severance 09.11.2011 04:14
quelle
2

Setze dies in dein ~/.bashrc :

  

alias hgrep = 'Geschichte | grep --color = auto '

Beispiel:

    
hadj messaoud 15.10.2017 12:59
quelle
1

Wenn Sie die Shell in Emacs verwenden ( M-x shell ) Sie können M-r verwenden (dies ist äquivalent zu Strg + R in a Terminal ).

    
N.N. 26.08.2012 17:33
quelle
0

Ich wollte dies als Kommentar zu @ ssmy konnte die Formatierung im Kommentar jedoch nicht zur Zusammenarbeit bringen.

Nachdem Sie den Verlauf mit history | grep ssh durchsucht haben, können Sie den gewünschten Befehl ausführen, indem Sie die vorangestellte Nummer mit einem Ausrufezeichen eingeben, z. !42 .

Beispiel:

$ history | grep ssh
  5 ssh me@someserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$ !42
    
magikMaker 31.01.2018 22:12
quelle

Tags und Links