¿Cómo insertar un comando completo del historial en el comando actual en Bash?
Investigué un poco e identifiqué dos combinaciones de teclas GNU Readline que insertarían la primera y la última palabra del comando anterior. Desafortunadamente, no sé cómo proporcionar un argumento n
para estas combinaciones de teclas (¿cómo hacerlo?), e incluso si lo supiera, no sería factible insertar comandos largos del historial.
Ctrl-Alt-y
Inserte el primer argumento del comando anterior. Con un argumento n, inserte la enésima palabra del comando anterior.
Alt-.
Alt-_
Inserte el último argumento del comando anterior. Con un argumento n, inserte la enésima palabra del comando anterior.
¿GNU Readline admite la inserción de comandos completos del historial en el comando actual?
DESCARGO DE RESPONSABILIDAD: No estoy buscando la sustitución del comando Bash.
Respuesta1
Ingrese la expansión del historial deseada (digamos !foo
o !39
) yExpandelo:
history-expand-line (M-^)
Realice la expansión del historial en la línea actual.
Meta sería Alt, IIRC.
Respuesta2
Puedes crear un enlace tú mismo. Sólo tienes que decidir a qué clave vincularlo. Ejemplo conCtrl-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'
Hacer que se inserten entradas anteriores cuando se repitan se deja como ejercicio al lector ;-)