Qual é o motivo para usar && em vez de; colocar para comandos na mesma linha?

30

Não sendo um especialista em Linux nem Unix Eu estou querendo saber qual é a diferença entre esses dois métodos de stringing 2 comandos na mesma linha? Não vejo diferença na saída neste exemplo 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

Isso não causou nenhum problema - estou apenas curioso ...

    
por pfeiffep 18.03.2013 / 00:41

2 respostas

43

&& é uma lógica 'e'. O primeiro argumento é avaliado e o segundo é avaliado apenas se o primeiro retornar true. A razão é que "false AND something" é sempre falso, portanto, não há necessidade de avaliar o segundo argumento neste caso.

Portanto, usando && , certifique-se de que o segundo comando não seja executado se o primeiro reportar um erro ( true é representado pelo código de saída 0 , o que indica que não houve erro). Em contraste, ; executa os dois comandos, independentemente do resultado do primeiro.

Conclusão: Comandos de encadeamento com && são um bom hábito. Ao contrário de ; , ele não executará comandos subsequentes se algo der errado.

    
por azimut 18.03.2013 / 00:44
26

;

Executa os comandos sequencialmente, independentemente do estado de saída anterior:

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

& amp; & amp;

Lógica AND

Execute o próximo comando, mas apenas se o comando anterior tiver sido bem-sucedido (o status de saída foi 0 ):

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

||

OR lógica

Execute o próximo comando, mas apenas se o comando anterior tiver falhado (o status de saída foi não 0 ):

# sh -c "exit 0" || echo "2nd command"
#
# sh -c "exit 1" || echo "2nd command"
2nd command
    
por phoibos 18.03.2013 / 12:22