Linux

La encadenación de comandos en Linux : ¿Cómo funciona?

I. Introducción

En Linux, a menudo es necesario ejecutar varios comandos para realizar una tarea. A veces, para aumentar la eficiencia, puede ser útil encadenar varios comandos, de modo que se ejecuten uno tras otro. Pero, ¿cómo hacerlo?

Este tutorial presenta las diferentes formas de enlazar comandos en Linux, utilizando varios ejemplos. Esto nos permitirá, por ejemplo, pasar del formato :

sudo apt-get update
sudo apt-get upgrade -y

A éste:

sudo apt-get update && sudo apt-get upgrade -y

Antes de empezar, debes saber que en Linux existen varios caracteres que actúan como operadores y permiten encadenar comandos:

  • El punto y coma ";"
  • El doble ampersand"&&".
  • La doble barra vertical"||"
  • El conducto"|

Cada carácter tiene un comportamiento diferente a la hora de enlazar comandos, como veremos más adelante en este artículo.

II. Uso del punto y coma

En Linux, el punto y coma se puede utilizar para encadenar varios comandos, independientemente de si tienen éxito o fallan. De esta forma, todos los comandos se ejecutan en secuencia, incluso si un comando anterior falla. No hay control sobre el resultado del comando anterior.

Por ejemplo, si queremos crear una carpeta, acceder a esa carpeta y luego crear un archivo vacío, encadenaremos tres comandos de la siguiente manera:

mkdir /home/flo/carpeta1/; cd /home/flo/carpeta1/; touch miarchivo.txt

Dados los permisos actuales del usuario, podemos asumir que todo irá según lo previsto y que no existen riesgos reales. No obstante, este método puede considerarse el menos "limpio" para encadenar comandos en Linux.

De hecho, en comandos diferentes y más complejos, podemos imaginar que un comando encuentra un problema y devuelve un error. Esto interrumpiría la ejecución de todas las órdenes siguientes. Entonces sería preferible poder ejecutar los comandos siguientes sólo si los anteriores se han ejecutado correctamente...

III. Uso del doble ampersand

Para resolver el problema anterior, podemos recurrir al uso del doble ampersand para secuenciar comandos. Si tomamos el ejemplo anterior, el resultado es :

mkdir /home/flo/carpeta1/ && cd /home/flo/carpeta1/ && touch miarchivo.txt

Ahora, si el comando "cd /home/flo/dossier1" falla, el comando touch para crear el archivo también fallará, al igual que el comando cd. Así que no habrá más errores.

En lugar de apuntar al directorio "/home/flo" para crear la "carpeta1", imaginemos que por error especifico "/home/FLO". Esto es incorrecto, ya que Linux distingue entre mayúsculas y minúsculas. Si ejecutamos una secuencia de comandos con el punto y coma, los dos primeros comandos devolverán un error, mientras que el tercero (touch) se ejecutará correctamente. El problema es que, en lugar de crear el fichero en el directorio "/home/flo/carpeta1", ¡lo creará en el directorio actual! Si realizamos la misma prueba con el operador "&&", podemos ver que la ejecución se detiene como resultado del error encontrado por el comando mkdir.

En Linux, cada comando devuelve un código de salida que se puede recuperar mediante la variable $? (como en PowerShell). Un código de salida de 0 indica éxito, mientras que un código distinto de 0 (por ejemplo, 1 o 2, dependiendo del caso) señala un error. Linux utiliza estos códigos para determinar si se debe ejecutar el siguiente comando de una cadena.

He aquí un ejemplo:

Otro ejemplo común es la secuencia de comandos para actualizar paquetes en una distribución basada en Debian:

sudo apt-get update && sudo apt-get upgrade -y

En este ejemplo, "sudo apt-get upgrade -y" sólo se ejecutará si el comando "sudo apt-get update" tiene éxito.

También podríamos utilizar este método para descargar un archivo, extraerlo y luego desplazarnos al directorio resultante.

wget https://example.com/archive.tar.gz && tar zxvf archive.tar.gz -C /opt/ && cd /opt/archive/

En este ejemplo, cada paso depende del éxito del anterior:

  • El comando wget descarga el archivo comprimido.
  • Si la descarga se realiza correctamente, tar extrae el archivo en el directorio /opt/.
  • Por último, si la extracción se realiza correctamente, cd cambia el directorio actual a la carpeta extraída.

IV. Utilización de la doble barra vertical

La doble barra vertical permite ejecutar un comando sólo si el comando anterior falla (código de salida distinto de 0).

cd /home/flo/dossier1/ || echo "Esta carpeta no existe."

En este sencillo ejemplo, si la carpeta no existe, se mostrará en la consola el mensaje "La carpeta no existe" (además del error devuelto por el comando).

Por ejemplo, podemos intentar acceder al directorio "/home/flo/carpeta1", y si no existe, lo crearemos.

cd /home/flo/carpeta1 || mkdir /home/flo/carpeta1

También puede combinar varios operadores para crear secuencias más complejas. Aquí, el mensaje "¡Error!" será devuelto a la consola si uno de los dos comandos devuelve un error.

mkdir /home/flo/carpeta1 && cd /home/flo/carpeta1 || echo "Error !"

V. Utilización del gasoducto

La canalización es un operador muy utilizado en lenguajes de scripting y programación, incluido Bash (y PowerShell). Permite redirigir la salida estándar de un primer comando a la entrada estándar de un segundo comando (y así sucesivamente). Aunque es un poco diferente de la secuencia de comandos que acabamos de describir, sigue siendo importante conocerlo.

El siguiente ejemplo muestra sólo los archivos con la extensión ".txt" en el directorio actual, utilizando un filtro basado en grep.

ls -l | grep ".txt"

VI. Conclusión

Usando estos operadores, puedes crear secuencias eficientes para automatizar tus tareas Linux. Por supuesto, ¡también puedes utilizarlos en tus scripts Bash! No dudes en probarlos tú mismo y aplicarlos a tus propias necesidades.

author avatar
Florian Burnel Co-founder of IT-Connect
Systems and network engineer, co-founder of IT-Connect and Microsoft MVP "Cloud and Datacenter Management". I'd like to share my experience and discoveries through my articles. I'm a generalist with a particular interest in Microsoft solutions and scripting. Enjoy your reading.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.