qual é a diferença entre “command && command” e “command; comando"

47

Eu vejo esses dois usos no comando "& &" do Ubuntu "e" comando; comando ",
 por exemplo. apt-get update && apt-get upgrade

O que seria diferente se eu usar apt-get update; apt-get upgrade ?
 Eu não estou pedindo esse uso específico, mas, em geral, qual é a diferença entre esses dois usos?

    
por evilsoup 12.07.2013 / 17:03

2 respostas

85

&& é um operador lógico. ; é um sequenciamento simples.

Em cmd1 && cmd2 , o cmd2 só será executado se o cmd1 sair com um código de retorno bem-sucedido.

Considerando que em cmd1; cmd2 , cmd2 será executado independentemente do status de saída de cmd1 (supondo que você não tenha configurado seu shell para sair em todas as falhas em seu script ou algo assim).

Em uma nota relacionada, com cmd1 || cmd2 , usando o operador lógico || 'OR', o cmd2 só será executado se o cmd1 falhar (retorna um código de saída diferente de zero).

Esses operadores lógicos às vezes são usados em scripts no lugar de uma instrução if básica. Por exemplo,

if [[ -f "$foo" ]]; then mv "$foo" "${foo%.txt}.mkd"; fi

... pode ser mais concisamente alcançado com:

[[ -f "$foo" ]] && mv "$foo" "${foo%.txt}.mkd"
    
por 12.07.2013 / 17:08
33

Sintaxe

command1 && command2

comando2 é executado se, e somente se, command1 retornar um status de saída igual a zero ( true ). Em outras palavras, execute command1 e, se for bem-sucedido, execute command2 .

command1 ; command2

Ambos command1 e command2 serão executados independentemente. O ponto-e-vírgula permite que você digite muitos comandos em uma linha.

Relacionadas :

command1 || command2

comando2 é executado se, e somente se, command1 retorna um status de saída diferente de zero. Em outras palavras, execute command1 com êxito ou execute command2 .

Exemplo

Operador

&& :

$ rm /tmp/filename && echo "File deleted"
Operador

; :

$ echo "foo" ; echo "bar"
Operador

|| :

$ cat /tmp/filename 2>/dev/null || echo "Failed to open file"

Links Externos

  1. Linuxtopia.org
  2. Tldp.org
por 12.07.2013 / 17:09