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

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

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'

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.


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.


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.