– 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…
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
:
CTRL+R
(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.ENTER
. Si es CASI ese comando, y quieres editarlo, pulsa cursor derecha
o izquierda
y se quedará escrito para poder editarlo normalmente.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.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…
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
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 ;)
Un excelente artículo sobre Mastering bash and terminal: https://www.blockloop.io/mastering-bash-and-terminal