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 n
para 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 !foo
ou !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 ;-)