Este artículo fue publicado originalmente en go2linux.org el 4 de enero de 2009. El dominio ya no me pertenece, pero soy el autor original. Lo republico aquí en garron.me con correcciones y mejoras.
Introducción
El comando history de Bash lista tus comandos recientes. Una vez que encuentras el que necesitas, no hay razón para volver a escribirlo — Bash ofrece varias formas rápidas de recuperarlo y ejecutarlo.
Para saber cómo funciona el propio comando history (listado, búsqueda y configuración del tamaño del historial), consulta history — el comando de Linux para gestionar el historial de comandos.
Volver a ejecutar un comando por número — !N
Escribe ! seguido inmediatamente del número de comando que aparece en la salida de history (sin espacio):
history
466 man nohup
467 sudo apt install vim
468 sudo vim /etc/apt/sources.list
469 sudo apt update
470 man nice
Para volver a ejecutar el comando 470:
!470
Esto ejecuta man nice de inmediato. No hay confirmación.
Volver a ejecutar el último comando — !!
!! se expande al comando anterior completo:
apt update
# bash: permiso denegado
sudo !!
# Ejecuta: sudo apt update
Esto es especialmente útil cuando olvidas poner sudo.
Volver a ejecutar el último comando que empieza por una cadena — !cadena
!cadena busca hacia atrás en el historial el comando más reciente que empiece por cadena:
!vim # vuelve a ejecutar el último comando que empezó con "vim"
!sudo apt # vuelve a ejecutar el último comando que empezó con "sudo apt"
Usar parte del último comando — !$, !^, !*
Estos designadores de evento permiten reutilizar partes del último comando.
| Atajo | Se expande a |
|---|---|
!$ |
Último argumento del comando anterior |
!^ |
Primer argumento del comando anterior |
!* |
Todos los argumentos del comando anterior |
Ejemplo — !$:
mkdir /var/www/miaplicacion
cd !$ # cd /var/www/miaplicacion
Ejemplo — !^:
diff archivo1.txt archivo2.txt
vim !^ # vim archivo1.txt
Sustitución rápida — ^viejo^nuevo
Reemplaza una palabra en el comando anterior y ejecuta la versión corregida:
cat /etc/ngnix/nginx.conf
# error tipográfico en la ruta
^ngnix^nginx
# Ejecuta: cat /etc/nginx/nginx.conf
Búsqueda inversa — Ctrl+R
Pulsa Ctrl+R y empieza a escribir. Bash busca hacia atrás en el historial y muestra la coincidencia más reciente mientras escribes.
(reverse-i-search)`vim': sudo vim /etc/nginx/nginx.conf
- Pulsa
Ctrl+Rotra vez para ir a la coincidencia anterior - Pulsa
Enterpara ejecutar el comando mostrado - Pulsa
Ctrl+GoEscapepara cancelar sin ejecutar nada
Ctrl+R suele ser la forma más rápida de volver a ejecutar un comando reciente del que no recuerdas el número.
Vista previa sin ejecutar — :p
Para ver a qué se expandiría !N o !cadena sin ejecutarlo, añade :p:
!470:p # muestra el comando pero no lo ejecuta
!vim:p # muestra el comando coincidente pero no lo ejecuta
El comando también se añade al historial, así que puedes pulsar la tecla de cursor arriba para editarlo antes de ejecutarlo.
Tabla resumen
| Atajo | Qué hace |
|---|---|
!N |
Vuelve a ejecutar el comando número N |
!! |
Vuelve a ejecutar el último comando |
!cadena |
Vuelve a ejecutar el último comando que empieza por cadena |
!$ |
Último argumento del comando anterior |
!^ |
Primer argumento del comando anterior |
!* |
Todos los argumentos del comando anterior |
^viejo^nuevo |
Sustituye viejo por nuevo en el último comando |
Ctrl+R |
Búsqueda inversa interactiva en el historial |
!N:p |
Muestra el comando N sin ejecutarlo |