3.8.- Histórico de comandos

El shell almacena los comandos ejecutados en un archivo de texto localizado en el directorio de inicio del usuario. el nombre de este archivo difiere en función del shell utilizado. Podemos recuperar los comandos almacenados en este archivo, shell ofrece dos opciones: emacs y vi. Estas dos opciones son mutuamente excluyentes, es decir, la activación de una desactiva la otra. en ksh, ambas están desactivadas por defecto. En bash, la opción emacs está activada por defecto.

Configuración por defecto en ksh

Configuración por defecto en bash

Configurar la recuperación de comandos en ksh

Opción vi

El shell nos ofrece el uso de comandos idénticos a los que tiene el editor vi para recuperar y, eventualmente modificar los comandos almacenados en el archivo ~/.sh_history. Para conseguir esto debemos activarlo con la opción:

A partir de este momento, hay que imaginarse que se está dentro del editor vi. Ciertas acciones se ejecutan en modo comando, otras en modo inserción. La siguiente tabla agrupa los comandos principales que nos permite gestionar el histórico.

Acciones en modo inserción

Encontramos que es el modo por defecto. El modo inserción permite introducir o modificar un comando.

 Acciones en modo comando

Opción emacs

El shell ofrece el uso de comandos idénticos a los del editor emacs para recuperar y, eventualmente, modificar los comandos almacenados en el archivo ~/.sh_history. Para ello debemos activar la opción:

Veamos la tabla siguiente donde se agrupan los comandos principales que permiten gestionar el histórico.

Ventaja de la opción emacs

Para los que no estamos familiarizados con  las opciones vi y emacs, todos estos comandos nos pueden parecer complicados. En este caso, se recomienda usar el modo emacs ya que con una configuración suplementaria.

Podemos utilizar las flechas del teclado para recorrer el histórico.

Veamos la representación de las flechas:

Con el comando alias podemos realizar las correspondencias entre las flechas del teclado y los comandos del modo emacs.

A continuación veremos el modo de hacerlo:

Si la opción emacs no está previamente activada, hay que activarla.

A continuación en el siguiente ejemplo creará la correspondencia entre la flecha hacia arriba y el comando emacs  para ascender en el histórico: ^p.

Veamos a continuación lo que tiene que aparecer en pantalla:

Veamos los caracteres que fueron necesarios para obtener la línea anterior:

Seguimos el procedimiento para las demás teclas:

Mostrar alias:

Utilizamos una tubería y los comandos introducidos:

La opción -v de cat permite mostrar de manera visible los caracteres no imprimibles. grep ‘__’ muestra los alias que comienzan por __.

Configurar la recuperación de los comandos en bash

En bash, la gestión del histórico es mucho más simple. Como en ksh, las opciones emacs y vi están disponibles, la opción emacs está activada por defecto. La correspondencia entre los comandos emacs y las flechas del teclado es automática.

El usuario que utilice la opción vi, almacena los comandos en ~/.bash_history. Podemos ver el archivo tecleando:

Veremos nuestro editor (en mi caso utilice el editor gedit) los comandos almacenados en el historial de bash.

Ejemplo (incompleto) del contenido del historial de bash.

Completar los nombres de archivo

Esta funcionalidad nos la ofrece ksh y bash. Pulsando las teclas adecuadas, el shell puede completar automáticamente un nombre de archivo o proponer la lista de los archivos disponibles en un directorio determinado.

Completar en el shell bash

Ejemplo

Veamos una lista del directorio actual:

Si tecleamos la primera letra de un nombre de archivo seguida del carácter de tabulación, el bash completa automáticamente la entrada por el nombre del archivo del directorio actual que comience por la letra que elijamos, con la condición de que el directorio no contenga más de uno, que es caso que nos ocupa:

Aquí solo queremos ver el archivo env.txt pero solo introducimos el comando y la letra e.

Al pulsar la tecla TAB automáticamente se autocompleta el nombre del fichero.

Una vez completado el nombre le damos a validar con la tecla Enter.

Si hay nombres de ficheros que comienzan con las mismas letras, el shell no completa, en cambio, si pulsamos dos veces el tabulador, el shell muestra las distintas posibilidades.

Aquí pulsaremos dos veces la tecla TAB.

Al pulsar dos veces la tecla TAB, nos muestras las opciones de archivos.

Completar en el shell ksh

Modo vi

Veamos los ejemplos siguientes muestran las teclas que permiten gestionar el completado de los nombres de archivo cuando un usuario trabaja con ksh configurado en modo vi.

Ejemplo

La lista de los archivos del directorio actual es el siguiente:

Tecleando la primera letra de un nombre de archivo seguido de Escape «|«, el ksh completa automáticamente la entrada por el nombre de archivo del directorio actual que comienza por la letra e, con la condición de de que el directorio no contenga más de uno, que es el caso que nos ocupa:

Aquí escribimos el comando «ls» y la letra e.

Para completar pulsamos la tecla Esc  y «\»  comenzando el auto completado:

Al pulsar la tecla «Esc«, el cursor se coloca sobre la letra que elegimos (en este caso la letra e).

Seguidamente pulsamos las teclas «Alt Gr» + «\«, y acabará el autocompletado. Terminamos pulsando Intro para validar el resultado.

Cuando tenemos múltiples posibilidades, apretar la tecla Esc «=» permite listar las distintas posibilidades.

Modo emacs

Veamos los ejemplos siguientes que muestran las teclas que permiten gestionar el completado de los nombres de archivo cuando un usuario trabaja con ksh configurado en modo emacs (set -o emacs)

Ejemplo

La lista de archivos del directorio actual es:

Tecleando la primera letra de un nombre de archivo…

… pulsamos dos veces la tecla de Esc, el ksh completa automáticamente la entrada.

Veamos cuando hay múltiples posibilidades:

Si hay múltiples posibilidades…

… la tecla «Esc» y «=» nos ofrece una lista para elegir el archivo que deseamos.

Tabla resumen