Como inserir um comando inteiro do histórico no comando atual no Bash?

Como inserir um comando inteiro do histórico no comando atual no Bash?

Como inserir um comando inteiro do histórico no comando atual no Bash?

Fiz algumas pesquisas e identifiquei duas combinações de teclas GNU Readline que inseririam a primeira e a última palavras do comando anterior. Infelizmente, não sei como fornecer um argumento npara essas combinações de teclas (como fazer?), E mesmo que soubesse, não seria viável inserir comandos longos do histórico.

Ctrl-Alt-y

Insira o primeiro argumento no comando anterior. Com um argumento n, insira a enésima palavra do comando anterior.

Alt-.
Alt-_

Insira o último argumento do comando anterior. Com um argumento n, insira a enésima palavra do comando anterior.

O GNU Readline suporta a inserção de comandos inteiros do histórico no comando atual?

ISENÇÃO DE RESPONSABILIDADE: Não estou procurando substituição de comando Bash.

Responder1

Insira a expansão do histórico desejada (digamos !fooou !39) eexpandi-lo:

history-expand-line (M-^)
Execute a expansão do histórico na linha atual.

Meta seria Alt, IIRC.

Responder2

Você mesmo pode criar uma vinculação. Você só precisa decidir a qual chave vinculá-lo. Exemplo comCtrl-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'

Fazer inserir entradas anteriores quando repetidas fica como exercício para o leitor ;-)

informação relacionada