Tabla de contenidos
El shell bash es el entorno de terminal estándar incluido con la mayoría de las distribuciones de Linux, incluido con macOS y disponible para su instalación en Windows 10 . Recuerda los comandos que escribe y los almacena en un archivo histórico. Probablemente conozca algunos conceptos básicos del historial de bash, pero es mucho más poderoso de lo que cree.
Atajos de teclado
Para desplazarse por su historial de bash, puede usar algunos de los muchos atajos de teclado útiles de bash . Presione estos atajos y los comandos que ha usado anteriormente aparecerán en el indicador.
- Flecha hacia arriba o Ctrl + P : Ir al comando anterior en su historial. Presione la tecla varias veces para caminar hacia atrás a través de los comandos que ha utilizado.
- Flecha hacia abajo o Ctrl + N : vaya al siguiente comando de su historial. Presione la tecla varias veces para avanzar a través de los comandos que ha utilizado.
- Alt + R : revertir cualquier cambio en un comando que haya extraído de su historial si lo ha editado en la línea actual.
Bash también tiene un modo especial de «recuperación» que puede usar para buscar comandos que haya ejecutado anteriormente, en lugar de desplazarse por ellos uno por uno.
- Ctrl + R : recupera el último comando que coincida con los caracteres que proporcionaste. Presione este atajo y comience a escribir para buscar un comando en su historial de bash.
- Ctrl + O : Ejecute el comando que encontró con Ctrl + R.
- Ctrl + G : abandona el modo de búsqueda de historial sin ejecutar un comando.
Ver su historial de Bash
Puede imprimir todo su historial de bash en la pantalla ejecutando un solo comando:
historia
Verá una lista de todos los comandos en su historial de bash, junto con un número a la izquierda de cada uno. El comando con un «1» al lado es el comando más antiguo en su historial de bash, mientras que el comando con el número más alto es el más reciente.
Puede hacer lo que quiera con la salida. Por ejemplo, puede canalizarlo al grep
comando para buscar en su historial de comandos.
historia | grep your_search
También puede canalizarlo al tail
comando para ver solo una pequeña cantidad de los comandos recientes que ha ejecutado. Por ejemplo, el siguiente comando mostraría las últimas 5 entradas en su historial.
historia | cola -5
Ejecute comandos desde su historial
Bash puede «expandir» rápidamente comandos anteriores, o expandirlos y modificarlos. Esta función se conoce como «expansión del historial» y utiliza un signo de exclamación, conocido como «explosión». Simplemente escríbalos en el indicador y presione Entrar para ejecutarlos como lo haría con cualquier otro comando.
Para ejecutar un comando específico de su historial por su número, use el siguiente comando:
! #
Por ejemplo, digamos que desea ejecutar el comando 12 de su historial de bash. Ese es el comando con un «12» a la izquierda cuando ejecuta el history
comando. Escribirías el siguiente comando.
! 12
Para volver a ejecutar el último comando que ejecutó, escriba lo siguiente. Esto tiene el mismo efecto que presionar la flecha hacia arriba una vez para ver el comando anterior y luego presionar Enter.
!!
También puede hacer referencia a un comando un cierto número de líneas atrás. Por ejemplo, !-2
ejecutaría el penúltimo comando que ejecutó. !!
significa lo mismo que !-1
.
Esta expansión funciona en cualquier parte de la línea. Puede agregar lo que quiera antes o después !!
o cualquiera de las otras expresiones en esta sección. Por ejemplo, puede escribir el siguiente comando para volver a ejecutar el último comando que ejecutó sudo
, otorgándole privilegios de root. Esto es particularmente útil si olvida agregar sudo
antes de ejecutar un comando.
sudo !!
O, por ejemplo, puede volver a ejecutar el comando anterior y canalizar su salida a grep para buscar texto.
!! | texto grep
Para buscar un comando en su historial y ejecutarlo, escriba lo siguiente. Esto ejecutará el último comando que coincida con el texto que especifique:
!texto
Entonces, si ejecutó recientemente un comando que comenzó con ping
, puede ejecutar el siguiente comando para buscarlo. Esto buscará hacia atrás en su historial, localizará el comando más reciente que comienza con » pi
«, y lo ejecutará inmediatamente:
!Pi
Puede agregar un :p
a cualquiera de las expansiones anteriores y bash imprimirá el comando en el terminal sin ejecutarlo. Esto es útil si desea confirmar que está seleccionando el comando correcto antes de ejecutarlo.
! 12: p
!!:pags
! texto: p
Reutilice argumentos de su historial
Bash también te permite ejecutar un nuevo comando, pero usa argumentos de comandos anteriores en tu historial. Esto puede ayudarlo a reutilizar rápidamente argumentos largos o complicados sin tener que volver a escribirlos.
comando! $
Por ejemplo, digamos que ejecutó el comando touch /home/chris/some_long_file_name_you_dont_want_to_type_again
. Ahora desea ejecutar el comando nano /home/chris/some_long_file_name_you_dont_want_to_type_again
. En lugar de escribir todo desde cero, puede ejecutar:
nano! $
El !$
haría que bash rellene automáticamente el último argumento de su comando anterior.
Esto solo llena el último argumento. Entonces, si ejecuta ping google.com -c 4
y luego ejecuta ping !$
, esto simplemente se expandirá a » ping 4
«.
Para solucionar esta situación, puede usar el siguiente truco para expandir el primer argumento en la línea, en lugar del último:
comando! ^
Por lo tanto, si ejecutó ping google.com -c 4
y luego ejecutó ping !^
, bash expandiría esto a » ping google.com"
.
Para completar todos los argumentos usados en el comando anterior en lugar de un solo argumento, usaría lo siguiente:
comando! *
Entonces, si ejecutara en su ping !*
lugar, bash completaría automáticamente todos los argumentos que usó en el comando anterior.
Puede usar el mismo truco que usa para ejecutar comandos de su historial para obtener argumentos de ellos. Simplemente use el siguiente formulario.
comando! abc: #
Por ejemplo, ejecutamos el comando sudo hostname ubuntu
antes. Si ejecutamos el siguiente comando, bash buscará hacia atrás en el historial para encontrar el último comando que comience con las letras que escribimos y completará el argumento que especifiquemos. Entonces, si ejecutamos echo !su:2
, bash buscará hacia atrás para encontrar el último comando que comienza con “ su
” y completará su segundo argumento, que es “ ubuntu
“.
Otros trucos funcionan como es de esperar. Por ejemplo, reemplazar el número con un asterisco, conocido como comodín, hace que bash complete todos los argumentos del comando:
comando! abc: *
Vuelva a ejecutar el comando anterior y modifíquelo
Bash también le permite volver a ejecutar el comando anterior y especificar algo que debe cambiarse. Esto puede resultar útil para corregir un error tipográfico en un comando. Por ejemplo, el siguiente comando volverá a ejecutar el comando anterior, reemplazando el texto “ abc
” en él con el texto “ xyz
“.
^ abc ^ xyz
Por ejemplo, si ejecutó accidentalmente ping gogle.com
, podría ejecutar ^gog^goog
y bash ejecutaría el comando en su ping google.com
lugar.
Dónde se almacena su historial y cómo borrarlo
El shell bash almacena el historial de comandos que ha ejecutado en el archivo de historial de su cuenta de usuario en ~ / .bash_history por defecto. Por ejemplo, si su nombre de usuario es bob, encontrará este archivo en /home/bob/.bash_history.
Debido a que su historial se almacena en un archivo, persiste entre sesiones. Puede ejecutar algunos comandos, cerrar sesión, volver al día siguiente y esos comandos aún estarán en su archivo de historial listos para ver y usar. Cada cuenta de usuario tiene su propio archivo de historial con un historial de comandos independiente.
Para borrar su historial de bash, puede ejecutar el siguiente comando. Esto borra el contenido del archivo .bash_history de su cuenta de usuario:
historia -c
Bash solo recuerda una cantidad limitada de comandos de forma predeterminada, lo que evita que el archivo de historial crezca demasiado. El número de entradas del historial que recuerda bash está controlado por la HISTSIZE
variable. El valor predeterminado suele ser 500 o 1000 entradas. Puede ejecutar el siguiente comando para ver el tamaño del historial de bash en su sistema.
echo $ HISTSIZE
Para establecer su historial en cero, ejecute el siguiente comando.
HISTSIZE = 0
Para la sesión actual, bash no almacenará ninguna entrada del historial a menos que ejecute un comando como HISTSIZE=1000
para volver a establecerlo en un cierto número de entradas.
Cómo ignorar espacios y duplicados
Bash le permite ignorar las entradas del historial que comienzan con un espacio si establece la HISTCONTROL
variable enignorespace.
HISTCONTROL = ignora el espacio
Escriba un espacio antes de un comando antes de ejecutarlo en el shell bash y el comando se ejecutará normalmente, pero no aparecerá en su historial si tiene esta variable habilitada. Esto le permite mantener su historial un poco más limpio, eligiendo ejecutar comandos sin que aparezcan en su historial.
Bash también le permite ignorar los comandos duplicados que pueden saturar su historial. Para hacerlo, configure HISTCONTROL
enignoredups.
HISTCONTROL = ignorar
Para usar la función ignorespace
y ignoredups
, establezca la HISTCONTROL
variable enignoreboth.
HISTCONTROL=ignoreboth
Note that bash variables you set will only persist for the current session. You’ll need to add these to your user account’s .bashrc file to have these values automatically set in every bash session you start, if you prefer that.
The bash shell is a complex tool with many more options than these. Consult the Bash History Builtins and History Expansion sections in the official bash manual more detailed information and other advanced tricks you can use.