¿Cuál es la diferencia entre ampersand y punto y coma en Linux Bash ?
Por ejemplo,
$ command1 && command2
vs
$ command1; command2
¿Cuál es la diferencia entre ampersand y punto y coma en Linux Bash ?
Por ejemplo,
$ command1 && command2
vs
$ command1; command2
Respuestas:
El &&
operador es un operador AND booleano: si el lado izquierdo devuelve un estado de salida distinto de cero, el operador devuelve ese estado y no evalúa el lado derecho (cortocircuita), de lo contrario evalúa el lado derecho y devuelve su estado de salida . Esto se usa comúnmente para asegurarse de que command2
solo se ejecute si se command1
ejecuta correctamente.
El ;
token solo separa los comandos, por lo que ejecutará el segundo comando independientemente de si el primero tiene éxito o no.
&&
diferente de un simple ampersand &
en bash?
&
hace que el comando se ejecute en segundo plano, así que sí. "Ejecutar esto en segundo plano" es muy diferente de "ejecutar este siguiente comando sólo si este otro tiene éxito".
command1 && command2
se ejecuta command2
si (y solo si) la command1
ejecución finaliza correctamente. En la jerga de Unix, eso significa código de salida / código de retorno igual a cero.
command1; command2
se ejecuta command2
después de ejecutar command1
, secuencialmente. No importa si los comandos tuvieron éxito o no.
La primera es una lógica simple que AND
usa evaluación de cortocircuito, la última simplemente delimita dos comandos.
Lo que sucede en real es que cuando el primer programa devuelve un código de salida distinto de cero, el conjunto AND
se evalúa FALSE
y el segundo comando no se ejecutará. El último simplemente los ejecuta a ambos en orden.