La Bourne Again Shell, más conocida como bash, es la que viene por defecto en la mayoría de las distribuciones de Linux. Es extremadamente potente en lo que a shells de comandos se refiere, y contiene todo tipo de trucos ingeniosos para aquellos que estén dispuestos a aprender. Una de las mejores características es, en mi opinión, el sistema de historial de comandos.

Hay muchas opciones para usar con el historial de bash, algunas de ellas las uso casi cada vez que abro un shell de comandos. Hoy voy a cubrir algunos de los aspectos más útiles del historial, pero ciertamente no podré cubrirlos todos.

Flechas arriba/abajo

Muchos de vosotros probablemente conozcáis esto, pero para quien no lo sepa, os hará la vida mucho más fácil. Cada vez que estés en el shell de comandos, simplemente usa las flechas arriba y abajo de tu teclado para moverte por la lista de comandos introducidos previamente. La próxima vez que introduzcas un comando largo que resulte tener una errata, no tendrás que volver a escribirlo todo, simplemente pulsa la flecha hacia arriba y haz las modificaciones necesarias.

!!

Una característica similar a la anterior es el doble bang (!!). Estos caracteres introducidos en el intérprete de comandos representan el último comando tecleado. Digamos que estás tratando de ejecutar un comando sólo para descubrir que necesitas privilegios de root para hacerlo. En lugar de volver a escribir todo el comando, puedes simplemente introducir

sudo!

Bash sustituirá el !! por el comando anterior, como en el ejemplo siguiente.

bash-history-bangbang

Esto también funciona hacia atrás, puedes hacer algo como

!-5

para recuperar el comando 5 entradas atrás en el historial.

!(palabra)

Tal vez hace unos días escribió un comando largo y complejo en su shell, por ejemplo una serie de opciones para “wterm”. Puedes encontrar y reintroducir ese comando utilizando la búsqueda incorporada en el historial. Simplemente agrega las primeras letras del comando después de ! y bash lo encontrará.

Ejemplo de !(palabra)

Ten cuidado con esto. Puedes terminar ejecutando algo distinto a lo que esperabas. No use esto para comandos potencialmente peligrosos como “rm” o “fdisk”.

(palabra)

Esta función es similar a la anterior en el sentido de que busca en el historial la palabra introducida, pero a diferencia de !(palabra) esta encontrará la palabra en cualquier parte del comando, no sólo al principio.

bash-history-bangquestion

Tenga cuidado con esto. Puede terminar ejecutando algo distinto a lo que esperaba. No use esto para comandos potencialmente peligrosos como “rm” o “fdisk”.

Ctrl-R

Esta puede ser mi herramienta de historial favorita. Es un poco como el ítem !? anterior, pero interactivo. En tu shell de comandos, pulsa Ctrl-R, y comenzará una búsqueda. Mientras escribes, bash buscará en el historial y te mostrará los resultados a medida que escribes. Cuando muestre el comando que quieres, simplemente pulsa enter y ejecutará ese comando. Esto puede ser más seguro que cosas como !? porque puedes ver cuál será el comando antes de ejecutarlo, así que no tienes que adivinar o confiar en la memoria.

Ejemplo de Ctrl-R en el shell

Búsqueda manual

Tal vez no te guste la forma en que funciona Ctrl-R, o quieras ver TODOS los comandos que escribiste, o sólo los que contienen una palabra en particular. El comando historial le mostrará su historial completo de comandos, junto con el número de historial de cada comando (mantenga ese pensamiento, cubriremos esos números en un momento).

También puedes especificar el número de elementos que mostrará el comando del historial. Para ver las últimas 10 entradas del historial, puedes escribir

historial10

Para ver todas las entradas del historial que contengan una palabra en particular, puede utilizar grep para filtrar los resultados, como se indica a continuación.

Ejemplo de uso de grep para filtrar la lista del historial

(número)

Cuando utilices el comando history para ver la lista del historial de comandos, verás que cada elemento de la lista tiene un número asociado. Puedes usarlo para recordar ese comando en particular. Por ejemplo, el ítem 87 puede ser ejecutado nuevamente ingresando

!87

en tu shell.

Sustitución de palabras

Este es muy bueno. ¿Cuántas veces has escrito un gran comando largo sólo para darte cuenta de que pusiste, digamos, hdd cuando querías hdc

? Bueno, bash te tiene cubierto. Puedes reemplazar una palabra en el comando anterior por otra usando “^”, como en el ejemplo siguiente

Ejemplo de sustitución de palabras con

Gestionando tu historial

Por defecto, el historial se guarda en ~/.bash_history. Puedes manejar este archivo como te parezca, pero hay algunas cosas útiles que puedes probar para gestionarlo automáticamente. A saber, establecer las variables de entorno HISTSIZE y HISTFILESIZE

. Para establecer el número de entradas que se pueden guardar en el archivo de historial a 1000, introduzca
exportHISTFILESIZE=1000

en su shell. Esto limitará el archivo a 1000 entradas. Si quieres hacer este cambio permanente, pon ese comando de exportación en tu archivo .bashrc o .bash_profile.