Befehlszeilenabschluss aus dem Befehlsverlauf

84

Also habe ich mir die Geschichte und Ctrl+ angesehen R, aber sie sind nicht das, was ich zu wissen glaubte. Gibt es eine Möglichkeit, den Beginn eines Befehls einzugeben und die Übereinstimmungen in meinem Verlauf mit einer Bash-Verknüpfung durchzugehen?

# mysq(some shortcut key)

Gibt mir:

# mysqldump  --add-drop-table -e -q -n -C -u 
(some shortcut key)
#  mysql -u ben.dauphinee -p
Ben Dauphinee
quelle
Randnotiz: Es gibt '<kbd> Alt + Tab </ kbd>' für tty ohne Desktop.
neverMind9

Antworten:

90

Durch Drücken von Ctrl+ Rwird die Rückwärtssuche geöffnet. Beginnen Sie nun mit der Eingabe Ihres Befehls. Dies ergibt die erste Übereinstimmung. Durch erneutes (und erneutes) Drücken von Ctrl+ Rkönnen Sie durch den Verlauf blättern.

mysq(Ctrl+R)

Würde geben:

mysqldump  --add-drop-table -e -q -n -C -u 

Ctrl+ Rnochmal:

mysql -u ben.dauphinee -p
wedeln
quelle
5
Vielen Dank. Außerdem setzt Esc den ausgewählten Befehl in Ihre Befehlszeile, ohne ihn auszuführen, während Enter den ausgewählten Befehl ausführt.
Ben Dauphinee
3
Ich finde STRG + E dafür besser als ESC, weil es umständlich ist, nach Escape zu greifen, aber ich drücke bereits STRG + R, also ist E genau da. Dadurch wird auch der Cursor am Ende der Zeile positioniert. Dies ist praktisch, wenn ich etwas ändern möchte (z. B. einen Dateinamen), was ich als häufigen Fall empfinde.
Sorpigal
Leider funktioniert es nicht auf Cygwin
ATorras
2
Zumindest auf dem Mac scheint mysq(CTRL+R)(CTRL+R)es, als würde er keine Befehle durchlaufen, die mit "mysq" beginnen. Sie müssen (CTRL+R)mysq(CTRL+R)stattdessen tun
BlueRaja - Danny Pflughoeft
62

Um das, was Gilles gesagt hat, zu erweitern, habe ich Folgendes in meinem .inputrc, um die Auf- / Ab-Pfeiltaste an history-search-backwardund zu binden history-search-forward:

# Key bindings, up/down arrow searches through history
"\e[A": history-search-backward
"\e[B": history-search-forward
"\eOA": history-search-backward
"\eOB": history-search-forward

Geben Sie einfach etwas ein (optional) und drücken Sie die Aufwärts- / Abwärtspfeiltaste, um im Verlauf nach Befehlen zu suchen, die mit Ihrer Eingabe beginnen.

Um dies zu tun in .bashrcanstatt .inputrc, können Sie:

bind '"\e[A": history-search-backward'
Raychi
quelle
3
Diese Bindungen gehören zu ~ / .inputrc ... Danke, dass du meine Faulheit unterstützt hast.
Martin Zeitler
Es ist erwähnenswert, dass das '\ e' entscheidend ist, zumindest für Bash-Debütanten. Wenn Sie nur Strg-V eingeben, um den Tastenanschlag für Ihren Befehl zu erhalten, wird nicht die ganze Geschichte erzählt. Wenn Sie beispielsweise Strg-V-Meta-P (dh Alt-P) eingeben, wird ^ [p - zurückgegeben. Ersetzen Sie "^ [" durch "\ e", um das gewünschte Verhalten zu erzielen.
MrMas
Stimmen Sie mit @syslogic überein - fügen Sie die Zeilen in .inputrc ein und lassen Sie die Bind- und einfachen Anführungszeichen fallen.
MrMas
Durch Kopieren und Einfügen in .inputrc auf osx erhalte ich: source ~ / .inputrc -bash: \ e [A :: Befehl nicht gefunden -bash: \ e [B :: Befehl nicht gefunden -bash: \ eOA :: Befehl nicht gefunden -bash: \ eOB :: Befehl nicht gefunden
Walross die Katze
1
Siehe superuser.com/questions/241187/how-do-i-reload-inputrc . Sie können die Datei nicht als Quelle angeben.
Raychi
7

Sie können auch die PAGEUPTaste drücken, um einen Befehl automatisch zu vervollständigen. Es durchsucht im Grunde die bash_historyDatei.

0aslam0
quelle
Sie müssen zwei Zeilen /etc/inputrc$HOME/.inputrc"\e[5~": history-search-backward "\e[6~": history-search-forward
auskommentieren
5

Sie können die readline-Befehle verwenden history-search-backwardund history-search-forwardzwischen den Befehlszeilen navigieren, die mit dem bereits eingegebenen Präfix beginnen. Keiner dieser Befehle ist in der Standardkonfiguration an Schlüssel gebunden.

Zsh (zle) hat ähnliche Befehle history-beginning-search-backwardund history-beginning-search-forwardist standardmäßig auch nicht an Schlüssel gebunden. Es gibt auch history-search-backwardund history-search-forward, die das erste Wort des aktuellen Befehls als Präfix verwenden, um unabhängig von der Cursorposition zu suchen.

Gilles
quelle
4

Wenn Sie einen guten Überblick über sehr ähnliche Befehle erhalten möchten, können Sie eine Liste mit folgenden Befehlen erstellen:

history|grep KEYSTRING

Dann kopieren und einfügen mit der mittleren Maustaste.

Rgds - Joe

joe_zeroh
quelle