JuangaCovas.info

La página personal de Juan Gabriel Covas

Herramientas de usuario

Herramientas del sitio


linux:howtos:command-line-history

Búsqueda interactiva en el histórico de la línea de comandos

– Juan Gabriel Covas. 2015 / 2017

Hay momentos clave en la vida de un hombre. Y uno de ellos es cuando descubre cómo buscar rápidamente en el historial de comandos cuando se está en un terminal Linux, OSX, etc. Yo lo aprendí de un compañero de trabajo, la típica situación del tipo ¿Cómo has hecho eso? ¡Ilumíname!

Todos conocemos cómo usar cursor arriba y cursor abajo en un terminal para recorrer el “historial de comandos”. Oficialmente: usando el Command-line history.

También existe el comando history para ver la lista de todos los comandos introducidos “back in time”.

Pero los pros saben bien…

Cómo buscar en el historial de comandos con CTRL-R

En un terminal, usa CTRL-R para realizar una búsqueda interactiva hacia atrás (“reverse-i-search”) en el historial de comandos.

Por ejemplo:

Supongamos que quieres re-utilizar el último comando curl que escribiste, y de eso ya hace 18 comandos. En vez de pulsar 18 veces cursor arriba:

  1. Pulsas CTRL+R
  2. Aparecerá (reverse-i-search). Ahora según teclees curl irán apareciendo las líneas de comando que escribiste que contengan la cadena que escribes, así hasta la línea de comando más reciente en la que aparezca curl. Solo se te tiene que ocurrir la mejor manera de usarlo: por ejemplo buscar http porque sabes que estás buscando un comando en el que pusiste una URL, etc.
  3. Si lo que aparece es exactamente el comando que deseabas repetir, solo tienes que pulsar ENTER. Si es CASI ese comando, y quieres editarlo, pulsa cursor derecha o izquierda y se quedará escrito para poder editarlo normalmente.
  4. Si el comando más reciente encontrado no es justo el que buscas, y te gustaría seguir buscando hacia atrás en el tiempo (comandos más antiguos en el historial), vuelve a pulsar CTRL+R y aparecerá la siguiente coincidencia hacia atrás. Así seguimos pulsando CTRL+R las veces que necesitemos hasta que aparezca lo que queremos, si es que se encuentra. También puedes cambiar la palabra de búsqueda, añadiendo letras, espacios o borrando / cambiando lo que desees en cualquier momento.
  5. Si deseas salir del modo búsqueda, pulsa ESC.

Resetear la búsqueda a la entrada más reciente:
Hay que tener en cuenta que el “puntero” del historial al hacer CTRL+R recuerda la última posición del history utilizada mientras buscamos -siempre buscamos hacia atrás desde lo último encontrado- por lo que si queremos resetear la búsqueda a “la entrada más reciente del historial”, pulsamos CTRL + MAYÚS + > (signo mayor) y ya podemos volver a hacer búsquedas desde el comando más reciente, además de dejar limpio el comando actual.

Y eso es todo. Como últimas notas…

Flushear el histórico de comandos

Cuando no puedas vivir sin CTRL+R, recordarás más a menudo que el historial de los últimos comandos introducidos sólo se almacena correctamente en el archivo ~/.bash_history cuando salimos correctamente de un terminal (exit o logout). Si no se graban los últimos comandos, las búsquedas con CTRL+R no funcionarán para lo que esperamos encontrar, pero obviamente tampoco te aparecerían intentando acceder con cursor arriba ;P

Como solución a esto, se puede configurar el flusheo automático de los comandos al bash history como se explica en esta página.

Añadir a ~/.bashrc

export PROMPT_COMMAND=’history -a’

O bien, forzar manualmente el flusheo usando:

history -a

Aumentando el tamaño del histórico de comandos

También quieres asegurarte de que se guardarán suficientes líneas en el historial de comandos antes de que se pierdan los comandos introducidos más antiguos, modificando el archivo .bashrc de tu directorio home en el servidor deseado:

~/.bashrc

# Por defecto 1000 líneas de historial y 2000 KB es muy poco!!
HISTSIZE=1000
HISTFILESIZE=2000

Mejor 99999 líneas al menos y unos cuantos ceros más al 2000 ;)

Más lectura

Un excelente artículo sobre Mastering bash and terminal: https://www.blockloop.io/mastering-bash-and-terminal

linux/howtos/command-line-history.txt · Última modificación: 08/08/2024 11:22 por Juanga Covas