He buscado, pero no encontré nada sobre esto. Estoy buscando una funcionalidad en bash, usando una terminal.
Hace mucho tiempo, tenía un usuario en un sistema Debian y un amigo me configuró una conveniente función de búsqueda en el historial (creo que entonces usaba tcsh), donde escribía el comienzo de un comando anterior, presionaba la flecha hacia arriba, y haría una búsqueda, basada en la cadena parcial.
Por ejemplo, si mi historial es:
./script.pl
./script.pl arg1
cat output
cat output | grep yada
Y escribo .
y presiono la flecha hacia arriba, me mostraría ./script.pl arg1
:. Presiónelo nuevamente y se mostrará ./script.pl
, etc.
Muy parecido a lo que haría grep
en .bash_history. ¿Hay alguna manera de obtener esta funcionalidad?
Respuesta1
Crea ~/.inputrc
y agrega estas líneas:
# Respect default shortcuts.
$include /etc/inputrc
## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward
CONSEJO:Lea al final para obtener una explicación
$include /etc/inputrc
o qué hacer si ya tiene el archivo~/.inputrc
.
Las líneas que comienzan con #
son comentarios.
No recuerdo qué es hacia atrás y qué hacia adelante. Experimenta con ello. Quizás tengas que alternar hacia adelante y hacia atrás.
Cierre y vuelva a abrir todas las terminales para que el nuevo comportamiento entre en vigor.
Un poco de información general:
bash está usandolínea de lecturapara manejar el mensaje. ~/.inputrc
es el archivo de configuración de readline. Tenga en cuenta que esto también tendrá efecto en otro software que utilice la biblioteca readline, por ejemploIPython.
Leer elmanual de bashpara obtener más información sobre readline. Allí también podrás encontrar máscomandos de línea de lectura relacionados con el historial.
Para obtener los códigos de escape de las teclas de flecha, puede hacer lo siguiente:
- Comience
cat
en una terminal (solocat
, sin más argumentos). - Escriba las teclas en el teclado y obtendrá cosas como
^[[A
la flecha hacia arriba y^[[B
la flecha hacia abajo. - Reemplazar
^[
con\e
.
Para obtener más información ^[
y \e
ver aquí:https://unix.stackexchange.com/a/89817/380515
Sobre la línea $include /etc/inputrc
:
Readline intenta leer ~/.inputrc
para la configuración. Si ese archivo no existe, intentará leerlo /etc/inputrc
. Eso significa que si ~/.inputrc
existe no se leerá /etc/inputrc
.
Algunas distribuciones han preparado algunas configuraciones en formato /etc/inputrc
. Si luego crea, ~/.inputrc
perderá la configuración preparada. Esto puede ser o no lo que quieres. Para mantener la configuración preparada, /etc/inputrc
puede usar la línea $include /etc/inputrc
en su archivo ~/.inputrc
.
Si ya tiene el archivo, ~/.inputrc
significa que ya sabe lo que está haciendo. O lo heredó de la persona que configuró su sistema. O anteriormente seguiste una guía diferente que te decía que crearas el archivo y te olvidaste de él. De cualquier manera, es posible que desees verificar /etc/inputrc
y decidir si deseas mantenerlo con la línea $include /etc/inputrc
.
Respuesta2
Cree un archivo llamado setup_readline.sh con modo 644 en /etc/profile.d/ con el siguiente contenido, inicie sesión y verifique sus claves preferidas:
bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'
Creo que es la mejor manera de hacer esto. Principalmente si utiliza sistemas de gestión de configuración como chef, puppet, etc.
¡Y la configuración del sistema aún está intacta!
Respuesta3
Ctrl + Rle dará este tipo de funcionalidad. Comience a escribir un comando parcial y aparecerán los antiguos por los que puede navegar con las flechas hacia arriba y hacia abajo.
Más informaciónaquí.
Respuesta4
Para completar la respuesta de lesmana sobre ~/.inputrc
lo que debo crear en mi Trusty 14.04, verifique/agregue ~/.bashrc
(la primera línea ya existe en mi ~/.bashrc
):
shopt -s histappend
PROMPT_COMMAND='history -a'
Ya está explicado en francés.aquí.