1.7. El terminal como herramienta de trabajo
1.7.5. Recuperación de comandos mediante el historial de comandos
Puede ser conveniente poder repetir un comando que ejecutasteis anteriormente en una sesión de shell. Recordar una línea de comandos larga y compleja que escribisteis de manera incorrecta os puede ahorrar problemas. Afortunadamente, algunas características del shell os permiten recordar líneas de comandos anteriores, editar esas líneas o completar una línea de comando parcialmente escrita.
El historial del shell es una lista de los comandos que habéis ingresado antes. Usando el comando history
en un shell bash, podéis ver tus comandos anteriores. Luego, utilizando varias características del shell, podéis recuperar líneas de comando individuales de esa lista y cambiarlas como deseéis.
Para probar un poco de edición de línea de comandos, escribid lo siguiente:
$ ls /usr/bin | sort -f | less
Este comando muestra el contenido del directorio /usr/bin
, ordena el contenido en orden alfabético (sin importar mayúsculas o minúsculas) y pasa la salida a less
. El comando less
muestra la primera página de salida, después de lo cual podéis navegar por el resto de la salida de una línea (presiona enter) o a páginas (presiona la barra espaciadora) a la vez. Simplemente, presionad la tecla q cuando hayáis terminado. Ahora, supongamos que queréis cambiar vuestra línea de comandos en el terminal de /usr/bin
a /bin
y no queréis escribir demasiado. Si os colocáis en la línea de comandos, y seguís los siguientes pasos, podréis cambiar parte de la línea de comandos:
- Presionad la flecha hacia arriba (↑). Esto muestra el comando más reciente de tu historial de shell. Prueba para presionar más de una vez.
- Presionad Ctrl+A. Esto mueve el cursor al principio de la línea de comandos.
- Presionad Ctrl+E. Esto mueve el cursor al final de la línea de comandos.
- Presionad Ctrl+F o la flecha derecha (→). Repetid este comando varias veces para colocar el cursor debajo de la primera barra (/).
- Presionad Ctrl+D. Escribid este comando cuatro veces para eliminar
/usr
de la línea. - Presionad Enter. Ejecuta la línea de comandos una vez que hagáis decido qué ejecutar.
Mientras se edita una línea de comandos, en cualquier momento podéis escribir caracteres normales para añadirlos a la línea de comandos. Los caracteres aparecen en la posición del cursor de texto. Podéis utilizar la flecha derecha →, izquierda ← para mover el cursor de un extremo a otro de la línea de comandos. También podéis pulsar las teclas de flecha arriba ↑ y abajo ↓ para recorrer los anteriores comandos en la lista del historial para seleccionar una línea de comandos para editar.
Después de escribir una línea de comando, toda la línea se guarda en la lista de historial de vuestro shell. La lista se almacena en el shell actual hasta que salís del terminal. Además, cada orden que se escribe en la línea de comandos y se ejecuta, tenga sentido o no, se escribe en un archivo de historial, donde cualquier comando puede ser recordado para ser ejecutado nuevamente en otra sesión. Una vez que se recupera un comando, se puede modificar la línea de comando, como se ha descrito anteriormente.
Para ver vuestra lista de historial, utilizad el comando history
. Escribid el comando sin opciones o seguido de un número para listar esa cantidad de los comandos más recientes. Por ejemplo,
$ history 9
2012 date 2013 date +'%d/%m/%y' 2014 date +'%A, %B %d, %Y' 2015 ls 2016 ls Scripts/ 2017 ls 2018 echo $PATH 2019 ls /usr/bin | sort -f | less 2020 history 9
En lugar de simplemente ejecutar una línea de comando del historial de inmediato, se puede recuperar una línea en particular y editarla. Se muestran varios ejemplos.
Ejemplos
$ !n
: Ejecutar el número de comando. Reemplazad la n con el número de la línea de comando y esa línea se ejecutará. Por ejemplo, así es como puedéis repetir el comando de fecha mostrado como el número de comando 2012 en la lista de historial anterior:
$ !2012
date Wed 19 Apr 16:26:58 CEST 2023
$ !!
: Ejecutar comando anterior. Ejecuta la línea de comando anterior. Aquí os mostramos cómo ejecutar inmediatamente ese mismo comando date
:
$ !!
date Wed 19 Apr 16:29:06 CEST 2023
$ !?string?
: Ejecuta el comando que contiene un string
(cadena). Esto ejecuta el comando más reciente que contiene una cadena de caracteres específica. Por ejemplo, podéis ejecutar nuevamente el comando date
buscando solo una parte de esa línea de comando de la siguiente manera:
$ !?at?
date Wed 19 Apr 16:32:04 CEST 2023