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


Kann ich den Verlauf anders als den Verlauf anzeigen?

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


148
2017-11-02 01:25


Ursprung




Antworten:


Drücken Sie Strg+R und tippen Sie ein ssh. Strg+R startet die Suche vom letzten Befehl zum alten (Rückwärtssuche). Wenn Sie mehr als einen Befehl haben, der mit beginnt ssh, Drücken Sie Strg+R immer wieder, bis du das Spiel findest.

Sobald Sie das Spiel gefunden haben, können Sie drücken Eingeben Ausführen des Befehls oder des Links / Rechts-Cursors, um nur den Text des Befehls auszuwählen.

Es gibt keine Standard Umkehroption für Strg+R Um die Richtung der Suche aber zu invertieren Hier Sie werden einige Vorschläge dazu finden.


230
2017-11-02 01:32





Wenn Sie nur Ihre Geschichte durchsuchen möchten, können Sie einfach verwenden history | grep ssh, ersetzen Sie ssh für was auch immer Sie suchen möchten.


76
2017-11-02 01:36



Ich benutze diese Methode, weil ich verlinke, um in der Liste jeden Befehl zu sehen, der zu meinem Filter passt. - Pisu


Drücken Strg+R startet den "reverse-i-search" -Modus, die Eingabe von "ssh" würde Ihren Verlauf nach Befehlen durchsuchen, die "ssh" enthalten.


13
2017-11-02 01:33





Ich mache eine kleine 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 ich so viel von einem vorherigen Befehl, den ich mir wünsche, und benutze die Page Up / Page dn Tasten, um den Verlauf zu durchsuchen, immer beginnend mit der Seite nach oben


13
2017-11-02 01:42



Wenn Sie Root-Berechtigungen haben, können Sie / etc / inputrc soo bearbeiten, das wird für alle Benutzer funktionieren. - Wolfy
@doug, hmm .. ich habe Ubuntu 15.04. Diese Lösung funktioniert aber verwirren Strg + LeftArrow / Strg + RightArrow Schlüssel. Das Problem sieht so aus, als würde man die .inputrc-Datei erstellen und nicht mit den darin enthaltenen Einträgen. - Ravi
Vergessen Sie nicht, .inputrc erneut zu binden oder schließen Sie das Terminal - David Brossard


Hier ist eine andere Methode, die klassische Befehle verwendet (eher für Distros). Die Befehlsgeschichte wird in der Datei gespeichert .bash_history in Ihrem Home-Verzeichnis, so können Sie dies tun:

grep "ssh" ~/.bash_history

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


5
2017-11-02 09:49





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

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

Laden Sie jetzt Ihre Shell neu: exec bash. Sie haben jetzt einen neuen Befehl, den Sie so verwenden können:

hgrep ssh

Es zeigt Ihnen eine Liste der passenden Befehle aus Ihrem Verlauf. Geben Sie ein, um einen Befehl auszuführen ! gefolgt von der Befehlsnummer. 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 es viel flexiblere Suchen erlaubt und ich mehrere Ergebnisse gleichzeitig sehen kann.


2
2017-11-09 03:14





Setzen Sie das in Ihre ~/.bashrc :

alias hgrep = 'Geschichte | grep --farbe = automatisch

Beispiel:


2
2017-10-15 10:59





Wenn du benutzt Schale in Emacs (M-x shell) Sie können verwenden M-r (es ist gleichbedeutend mit Strg+R in einem Terminal).


1
2017-08-26 15:33





Die Geschichte ist gut, aber begrenzt - ich bevorzuge es, meine Bash-Umgebung so einzurichten, dass ich logge alle der Befehle, die ich je ausgeführt habe, zusätzlich zu dem Verzeichnis, in dem sie ausgeführt wurden. Dann führe ich einen Befehl aus, um alle Befehle aufzulisten, die ich im aktuellen Verzeichnis ausgeführt habe. Gericht 'sehen:

https://github.com/wolfwoolford/dish

Wenn Sie auf die Jagd eingehen möchten, geben Sie diese einfach in Ihrer .bashrc ein (https://github.com/wolfwoolford/dish/blob/master/dishrc)

Es gibt auch einen wirklich nützlichen Befehl, den Sie kostenlos erhalten: "Dishg" - oder "Dish Global". Dieser Befehl gibt alle Befehle aus, die jemals ausgeführt wurden, unabhängig vom Verzeichnis. Offensichtlich ist dieses nur nützlich, wenn es mit Grep und Tail usw. benutzt wird ...

Ich benutze es seit Jahren und es ist buchstäblich das erste, was ich installiere, wenn ich eine neue Box aufstelle. Es protokolliert die Befehle, die Sie in Textdateien ausführen, in einem versteckten Verzeichnis (~ / .dish). Ich hatte noch nie ein Problem mit dem Festplattenspeicher ...


1
2017-08-25 23:53





Wollte das als Kommentar zu schreiben @ssmy konnte aber nicht die Formatierung im Kommentar zur Zusammenarbeit bringen.

Nach dem Durchsuchen der Geschichte mit history | grep ssh Sie können dann den gewünschten Befehl ausführen, indem Sie die vorangestellte Nummer mit einem Ausrufezeichen eingeben, z. !42.

Beispiel:

$ Geschichte | grep ssh
  5 ssh me@irgendeserver.net
 13 ssh me@someotherserver.net
 42 ssh me@thisone.com
$! 42

0
2018-01-31 21:12