El CLI Bash es uno de los intérpretes de comandos más habituales en sistemas Linux, y una herramienta que nos permite trabajar mucho más rápido desde el terminal.
Una vez que sabemos abrir una consola y ejecutar comandos básicos, podemos aprovechar algunas funciones de Bash que nos harán la vida bastante más cómoda: historial, tuberías, redirecciones, ejecución en segundo plano y otras pequeñas maravillas de terminal.
Ejecución secuencial de comandos
En Bash es posible ejecutar varios comandos en una única línea. Así, si queremos ejecutar el comando1 y después el comando2, independientemente del resultado de comando1, podemos usar el separador ’;’
command1 ; command2
También es posible la ejecución condicional de secuencias de comandos, donde la ejecución depende del resultado del comando anterior.
Así, para ejecutar un comando sólo si el comando anterior ha tenido éxito, usamos el separador ’&&’
command1 && command2
Si por el contrario queremos ejecutar un comando sólo si el comando anterior ha fallado, usamos el separador ’||’
command1 || command2
A modo de ejemplo, para lanzar una espera de 5 segundos y, a continuación, lanzar el editor de texto ‘nano’ abriendo el fichero ‘hola.txt’ ejecutamos la siguiente instrucción:
sleep 5 && nano hola.txt
Usando el historial de Bash
Podemos desplazarnos entre los comandos introducidos con anterioridad usando las teclas “arriba” y “abajo” del teclado de flechas.
También podemos usar la búsqueda inversa pulsando las teclas ‘Control + R’. Al escribir las primeras letras de un comando que hayamos escrito con anterioridad, Bash busca entre los comandos y encuentra el comando que empieza por las letras que hemos escrito.
Una vez localizado, podemos pulsar enter para ejecutar el comando, o tabulación para dejarlo como comando actual.
Por otro lado, si queremos repetir el último comando usado podemos escribir
!!
Por ejemplo, es muy útil si hemos escrito un comando y nos hemos olvidado de usar sudo. Podemos repetir la orden escribiendo:
sudo !!
Finalmente, también es posible hacer referencia a uno o varios argumentos escritos en el último comando.
!* #El comando anterior sin la última palabra !
Por ejemplo, podemos crear un directorio y después acceder a él escribiendo:
mkdir nombreDeDirectorioMuyLargo cd $*
Un comportamiento similar puede obtenerse con la combinación de teclas ‘Alt + .,’ que nos muestra de forma cíclica los últimos argumentos introducidos.
Usando WildCards
Es posible usar el símbolo ’*’ como wildcard, es decir, un alias que significa “cualquier cosa”.
Por ejemplo, si tenemos un fichero que se llama ‘nombreDeFicheroRealmenteLargo’ y queremos aplicar un comando podemos emplear
comando nombre*Largo
Ejecutaremos comando en todos los ficheros que empiezan por nombre y terminen por largo, dentro del directorio actual.
Un uso muy habitual es borrar (o copiar, o cualquier otro comando) todos los ficheros que tengan una extensión. Por ejemplo, para borrar todos los ficheros con extensión ‘txt’ ejecutaríamos:
rm *.txt
Redirecciones en Bash
Otro aspecto interesante de es la posibilidad de realizar redirecciones, es decir, hacer que la salida o la entrada de un comando tenga un origen distinto a la consola de comandos. Los destinos/orígenes más habituales son ficheros de texto (aunque existen otros).
Así, una dirección de salida, en la que el resultado de un comando en lugar de mostrarse en la pantalla se enviaría a “destino”, quedaría así:
comando > destino
Y una redirección de entrada, en la que el comando en lugar de usar el teclado emplearía “origen” como entrada
comando2 < origen
Por ejemplo, si queremos guardar el resultado de un comando en un fichero de texto usamos una redirección de salida. Para ello empleamos el carácter ’>’ si queremos reemplazar el contenido del fichero, o ’>>’ si queremos añadir el contenido manteniendo el original.
Así, si queremos guardar el listado de ficheros y carpetas de un directorio en un fichero “output.txt” podríamos ejecutar la siguiente instrucción:
ls > output.txt
Si, continuando con el ejemplo, queremos contar el número de líneas del fichero “output.txt” podemos usar una redirección de entrada con la siguiente instrucción:
wc < output.txt
Tuberías (pipes)
Las tuberías permiten enviar el resultado de un comando como entrada a otro comando. Es similar a combinar una redirección de salida y una redirección de entrada. Para ello se emplea el carácter ’|’.
Por ejemplo, el siguiente ejemplo lista todos los ficheros de una carpeta con el comando ‘ls’ y después busca en el resultado las líneas que contienen la palabra ‘word’ con el comando ‘grep’.
ls | grep Word
Múltiples intérpretes de comandos
En la mayoría de distribuciones es posible ejecutar varios intérpretes de comandos independientes y simultáneos, aparte de los que podamos lanzar como ventanas dentro del entorno gráfico.

Así, podemos pulsar la combinación de teclado Control ‘Ctrl + Alt + F1’ … F6, para lanzar hasta 6 terminales independientes del entorno gráfico.
En caso de tener varias terminales abiertas, podemos ejecutar el siguiente comando para saber en qué terminal nos encontramos.
Tty
Por su parte, el atajo de teclado ‘Ctrl + d’ cierra la sesión de terminal actual. Por último, la combinación ‘Ctrl + Alt + F7’ nos devolverá al entorno gráfico, si estábamos usando alguno.
Ejecutar procesos en paralelo
También es posible ejecutar varios procesos en paralelo desde una única consola de comandos. Para ejecutar un comando y mandarlo a segundo plano empleamos el carácter ’&’
Por ejemplo, si queremos lanzar chromium pero no esperar a que se cierre para seguir ejecutando comandos, podemos lanzarlo en segundo plano con:
chromium &

Por otro lado, el atajo de teclado ‘Ctrl + z’ envía el proceso actual a segundo plano.
Para ver los procesos que tenemos ejecutándose en segundo plano ejecutamos el comando
bg
Y para recuperar el último proceso que hemos puesto en segundo plano empleamos el comando
fg
Con esto ya tenemos una base bastante buena para trabajar con Bash con más soltura. Aún quedan muchas más cosas por explicar, pero las iremos descubriendo poco a poco mientras usamos la consola en proyectos reales con Raspberry Pi y Linux.

