Wie fügt man in Bash einen vollständigen Befehl aus dem Verlauf in den aktuellen Befehl ein?

Wie fügt man in Bash einen vollständigen Befehl aus dem Verlauf in den aktuellen Befehl ein?

Wie fügt man in Bash einen vollständigen Befehl aus dem Verlauf in den aktuellen Befehl ein?

Ich habe einige Nachforschungen angestellt und zwei GNU Readline-Tastenkombinationen gefunden, die das erste und das letzte Wort des vorherigen Befehls einfügen würden. Leider weiß ich nicht, wie ich ein Argument nfür diese Tastenkombinationen bereitstellen kann (wie geht das?), und selbst wenn ich es wüsste, wäre es nicht möglich, lange Befehle aus dem Verlauf einzufügen.

Ctrl-Alt-y

Fügen Sie das erste Argument zum vorherigen Befehl ein. Fügen Sie mit dem Argument n das n-te Wort aus dem vorherigen Befehl ein.

Alt-.
Alt-_

Fügt das letzte Argument des vorherigen Befehls ein. Mit dem Argument n fügt man das n-te Wort des vorherigen Befehls ein.

Unterstützt GNU Readline das Einfügen des gesamten Befehls aus dem Verlauf in den aktuellen Befehl?

HAFTUNGSAUSSCHLUSS: Ich suche nicht nach einem Ersatz für Bash-Befehle.

Antwort1

Geben Sie die gewünschte Verlaufserweiterung ein (z. B. !foooder !39) undes ausweiten:

history-expand-line (M-^)
Führen Sie eine Verlaufserweiterung für die aktuelle Zeile durch.

Meta wäre Alt, wenn ich mich recht entsinne.

Antwort2

Sie können eine Bindung selbst erstellen. Sie müssen nur entscheiden, an welche Taste Sie sie binden möchten. Beispiel mitCtrl-T

insert_last_line(){
     local l=$READLINE_LINE p=READLINE_POINT h=$(fc -nl -0)
     READLINE_LINE=${l:0:p}${h#* }${l:p}
}
bind -x '"\C-T": insert_last_line'

Wie bei einer Wiederholung vorherige Einträge eingefügt werden, bleibt dem Leser als Übung überlassen ;-)

verwandte Informationen