it-swarm-es.com

¿Cuál es la razón para usar && en lugar de; colocar comandos en la misma línea?

No siendo un experto en Linux ni en Unix, me pregunto cuál es la diferencia entre estos 2 métodos de encadenar 2 comandos en la misma línea. No veo diferencia en la salida en este ejemplo simplista

Pete$date ; time
Sun Mar 17 19:37:20 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Pete$date &&time
Sun Mar 17 19:37:46 EDT 2013

real    0m0.000s
user    0m0.000s
sys 0m0.000s

Esto no ha causado ningún problema. Solo tengo curiosidad.

30
pfeiffep

&& es un 'y' lógico. El primer argumento se evalúa y el segundo se evalúa solo si el primero devuelve verdadero. La razón es que "falso Y algo" siempre es falso, por lo que no es necesario evaluar el segundo argumento en este caso.

Entonces, usando &&, se asegura de que el segundo comando no se ejecute si el primero informa un error (true está representado por el código de salida 0, que indica que no hubo error). En contraste, ; ejecuta ambos comandos, sin importar cuál sea el resultado del primero.

Conclusión: encadenar comandos con && es un buen hábito. A diferencia de ;, no ejecutará comandos posteriores si algo sale mal.

43
azimut

;

Ejecuta secuencialmente los comandos, sin importar el estado de salida anterior:

# sh -c "exit 0" ; echo "2nd command"
2nd command
# sh -c "exit 1" ; echo "2nd command"
2nd command

&&

Y lógico

Ejecute el siguiente comando, pero solo si el comando anterior tuvo éxito (el estado de salida fue 0):

# sh -c "exit 0" && echo "2nd command"
2nd command
# sh -c "exit 1" && echo "2nd command"
#

||

O lógico

Ejecute el siguiente comando, pero solo si el comando anterior falló (el estado de salida fue no0):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command
26
phoibos