Antworten:
Drücken Sie Ctrl+ Rund geben Sie ein ssh
. Ctrl+ Rstartet die Suche vom letzten zum alten Befehl (Rückwärtssuche). Wenn Sie mehr als einen Befehl haben, der mit beginnt ssh
, drücken Sie immer wieder Ctrl+ R, bis Sie die Übereinstimmung gefunden haben.
Sobald Sie die Übereinstimmung gefunden haben, können Sie drücken Enter, um den Befehl auszuführen, oder den linken / rechten Cursor, um nur den Text des Befehls auszuwählen.
Es gibt keine Standardumkehroption für Ctrl+ R, um die Suchrichtung umzukehren, aber hier finden Sie einige Vorschläge dazu.
Ich mache eine kleine Abwandlung des oben Genannten, funktioniert gut für mich (wenn Sie sich auf Ihre Bash-Geschichte beziehen)
In meinem Home-Ordner erstelle ich eine Datei mit dem Namen
.inputrc
Drinnen geht das
"\e[5~": history-search-backward
"\e[6~": history-search-forward
Hinweis: Das oben genannte scheint in 14.04 nicht mehr zu funktionieren, also macht dies dasselbe -
"\e[A":history-search-backward
"\e[B":history-search-forward
Wenn Sie dann einen beliebigen vorherigen Befehl eingeben und die Bild-auf / Bild-dn-Schaltflächen verwenden, wird der Verlauf durchsucht, wobei immer mit Bild-auf begonnen wird
Hier ist eine andere Methode, bei der klassische Befehle verwendet werden (die mit größerer Wahrscheinlichkeit in allen Distributionen funktionieren). Der Befehlsverlauf wird in der Datei .bash_history
in Ihrem Ausgangsverzeichnis gespeichert. Gehen Sie dazu folgendermaßen vor:
grep "ssh" ~/.bash_history
Vergessen Sie die -i
Flagge nicht, wenn Sie eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung benötigen.
history | grep ssh
Ich werde nur temporäre Session-ssh anzeigen, also würde ich diese Antwort anstreben.
Ich habe die folgende Funktion irgendwo im Internet gefunden und sie sehr effektiv genutzt. Fügen Sie dies in Ihre ~/.bashrc
:
hgrep () {
history | egrep --color=auto --recursive "$@" | egrep --color=auto --recursive -v "hgrep $@"
}
Jetzt neu laden Shell: exec bash
. Sie haben jetzt einen neuen Befehl, den Sie wie folgt verwenden können:
hgrep ssh
Es wird Ihnen eine Liste passender Befehle aus Ihrem Verlauf angezeigt. 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 Ctrl+, Rda er flexiblere Suchvorgänge ermöglicht und ich mehrere Ergebnisse gleichzeitig sehen kann.
Wenn Sie die Shell in Emacs ( M-x shell
) verwenden, können Sie sie verwenden M-r
(entspricht Ctrl+ Rin einem Terminal ).
Der Verlauf ist gut, aber begrenzt. Ich bevorzuge es, meine Bash-Umgebung so einzurichten, dass ich alle Befehle protokolliere, die ich jemals ausgeführt habe, zusätzlich zu dem Verzeichnis, in dem sie ausgeführt wurden. Anschließend führe ich einen Befehl aus, um alle Befehle aufzulisten Ich habe im aktuellen Verzeichnis ausgeführt, das ich per Pipe an grep usw. senden kann - es heißt "dish", siehe:
https://github.com/wolfwoolford/dish
Wenn Sie auf den Punkt kommen möchten, geben Sie dies einfach in Ihrer .bashrc-Datei an ( https://github.com/wolfwoolford/dish/blob/master/dishrc ).
Es gibt auch einen wirklich nützlichen Befehl namens "dishg" - oder "dish global" -, der jeden Befehl ausgibt, der jemals ausgeführt wurde, unabhängig vom Verzeichnis. Offensichtlich ist dieses nur nützlich, wenn es mit Grep und Tail usw. verwendet wird.
Ich benutze es seit Jahren und es ist buchstäblich das erste, was ich installiere, wenn ich eine neue Box einrichte. Es protokolliert die Befehle, die Sie in Textdateien in einem versteckten Verzeichnis (~ / .dish) ausführen. Ich hatte noch nie ein Problem mit dem Speicherplatz ...
Wollte dies als Kommentar zu @ssmy schreiben , konnte aber die Formatierung im Kommentar nicht erhalten, um zusammenzuarbeiten.
Nachdem Sie den Verlauf mit durchsucht haben history | grep ssh
, können Sie den gewünschten Befehl ausführen, indem Sie dessen Nummer mit einem Ausrufezeichen voranstellen, z !42
.
Beispiel:
$ history | grep ssh 5 ssh me@someserver.net 13 ssh me@someotherserver.net 42 ssh me@thisone.com $! 42