Si quisiera ejecutar dos comandos separados en una línea, podría hacer esto:
cd /home; ls -al
o esto:
cd /home && ls -al
Y obtengo los mismos resultados. Sin embargo, ¿qué está sucediendo en el fondo con estos dos métodos? ¿Cuál es la diferencia funcional entre ellos?
;
es realmente peligroso (al menos con el comando rm), por ejemplocd /some/dir; rm -fr ./*
. Entonces, con una operación tan destructiva, debe asegurarse de estar en el lugar correcto antes de ejecutar rm. El comando correcto escd /some/dir && rm -fr ./*
si a devuelve un código de salida cero, entonces se ejecuta b .
si a devuelve un código de salida distinto de cero, entonces b se ejecuta.
a se ejecuta y luego se ejecuta b .
fuente
Se ejecuta
ls
en el directorio actual porquecd /fakedir
fallará y el shell ignorará el estado de salida que no es cero.Debido a que el
&&
operador solo continuará si el comando anterior salió normalmente (estado de cero), nols
se realizará ninguna operación.Hay otros operadores, como los
&
que serán el fondo de un proceso. Aunque a menudo se coloca al final de un comando, se puede poner en el medio de una cadena.fuente
También puede unirlos como
if..then..else
para encadenar la lógica de comando.ejemplo:
fuente