3 Stimmen

alternativer Weg, um reverse-i-search auszulösen, ohne ctrl+r in der Bash zu drücken

Die Reverse-i-search-Funktion in der Bash ist nützlich, aber sie unterscheidet sich von den meisten anderen Bash-Befehlen dadurch, dass sie an eine Tastenkombination gebunden zu sein scheint ( Ctrl + R ). Wie kann ein Benutzer diese Funktion stattdessen mit einem Alias oder einem eingegebenen Befehl auslösen?

0 Stimmen

Da es sich um einen interaktiven Befehl handelt, muss er an etwas gebunden sein. Suchen Sie nach der Erweiterung/Ersetzung der Historie?

0 Stimmen

Im Grunde suche ich nach dem identischen Verhalten von Strg-R, aber mit einer Möglichkeit, es einzugeben, anstatt es mit genau dieser Tastenkombination auszulösen. Nichts Ausgefallenes, nur Ergonomie.

6voto

Dennis Williamson Punkte 322329

Wenn Sie in den Man Pages für bash oder history (3readline) unter "History Expansion > Event Designators" nachschauen, finden Sie Befehle für diese Art von Aufgaben.

!?prof?

würde den letzten Befehl aufrufen, der "prof" enthält, und ihn sofort ausführen. Wenn Sie den Befehl drucken möchten, ohne ihn auszuführen, können Sie ":p" anhängen

!?prof?:p

Um den Befehl in der Befehlszeile zu bearbeiten, geben Sie, wie im obigen Beispiel, ein:

!?prof

(drücken Sie nicht die Eingabetaste) und drücken Sie M-^

Diese verwenden die Erweiterungsfunktion der Bash. Sie erhalten nur die letzte Übereinstimmung.

Wenn Sie Skripte oder Aliase schreiben möchten, schauen Sie sich in der Bash-Manpage die eingebauten Befehle "fc" und "history" (-p oder -s) an. Auch "shopt -s histreedit".

Hier ist ein Beispiel für einen Alias:

alias dothis='`history -p "!?jpg?"`'

(das sind Anführungszeichen innerhalb der einfachen Anführungszeichen).

Mit einigen dieser Befehle können Sie auch einige coole "s/old/new" und andere Sachen machen.

0 Stimmen

Welche Tastatur sind M-^ ?

0 Stimmen

@milanHrabos Das wäre der Meta-Schlüssel. Versuchen Sie die Alt-Taste.

5voto

Pierre-Luc Simard Punkte 2713

Die Funktion reverse-i-search ist eigentlich eine readline-Funktion (reverse-search-history) und keine bash builtin-Funktion (man builtin oder siehe eingebaute Befehle im bash-Referenzhandbuch ). Meines Wissens gibt es keine Möglichkeit, eine Readline-Funktion aufzurufen, ohne sie an eine Taste zu binden.

Sie können alle Readline-Tasten, die an diese Funktionen gebunden sind, mit " bind -l -p ". Die Liste der bindbare Readline-Befehle sind ebenfalls im Referenzhandbuch zu finden.

Sie können jederzeit die history um eine Liste des Verlaufs zu erhalten, und verwenden Sie grep um zu finden, was Sie suchen. Ich selbst finde das sehr nützlich:

alias hists="history | grep -v '^ *[0-9]* *hists' | grep $@"

Wenn ich laufe hists something Ich erhalte eine Liste mit allen Befehlen, die mit something . Alles, was ich tun muss, ist dann !# zu tun, um den Befehl auszuführen. Zum Beispiel:

bash-3.2$ hists emacs
   30 emacs
  128 emacs
  129 emacs
  204 emacs
  310 emacs .bash_history
  324 emacs Documents/todo.txt
bash-3.2$ !324

Es ist nicht genau das, wonach Sie suchen, aber es ist so nah dran, wie ich es machen kann.

0 Stimmen

Das Durchsuchen der Historie ist genau das, was ich mit Strg-R angefangen habe, um von .... wegzukommen - trotzdem eine gute Antwort

0 Stimmen

Das funktioniert gut. Ich danke Ihnen. Das einzige, was es nicht kann, ist, den Anfang der Zeile zu finden, also habe ich es in alias hists="history | cut -b8- | grep -v '^ [0-9] *hists' | cut -grep $@"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X