Búsqueda del historial de Bash, parcial + flecha hacia arriba

Búsqueda del historial de Bash, parcial + flecha hacia arriba

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 grepen .bash_history. ¿Hay alguna manera de obtener esta funcionalidad?

Respuesta1

Crea ~/.inputrcy 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/inputrco 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. ~/.inputrces 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:

  1. Comience caten una terminal (solo cat, sin más argumentos).
  2. Escriba las teclas en el teclado y obtendrá cosas como ^[[Ala flecha hacia arriba y ^[[Bla flecha hacia abajo.
  3. Reemplazar ^[con \e.

Para obtener más información ^[y \ever aquí:https://unix.stackexchange.com/a/89817/380515


Sobre la línea $include /etc/inputrc:

Readline intenta leer ~/.inputrcpara la configuración. Si ese archivo no existe, intentará leerlo /etc/inputrc. Eso significa que si ~/.inputrcexiste no se leerá /etc/inputrc.

Algunas distribuciones han preparado algunas configuraciones en formato /etc/inputrc. Si luego crea, ~/.inputrcperderá la configuración preparada. Esto puede ser o no lo que quieres. Para mantener la configuración preparada, /etc/inputrcpuede usar la línea $include /etc/inputrcen su archivo ~/.inputrc.

Si ya tiene el archivo, ~/.inputrcsignifica 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/inputrcy 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 ~/.inputrclo 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í.

información relacionada