Cheatsheet:
A; B # Run A and then B, regardless of success of A
A && B # Run B if A succeeded
A || B # Run B if A failed
A & # Run A in background.
Nos tutoriais e nas instruções, vejo frequentemente comandos combinados. Por exemplo,
sudo apt-get update && sudo apt-get install pyrenamer
Parece haver quatro conectores possíveis: &
, &&
, ||
e ;
. Embora o conector &
esteja claro para mim (ele envia um processo para o segundo plano e deixa o terminal disponível), não está claro qual é a diferença entre &&
e ;
. E eu não sabia de ||
até o comentário de Kaya.
As seguintes questões lidam com a diferença entre os dois conectores, mas o fazem principalmente nos comentários:
Então, aqui estão algumas perguntas relacionadas:
;
e &&
? cd /somewhere_else; rm -Rf *
pode ter consequências destrutivas se o primeiro elemento na cadeia de comando falhar, por exemplo. Cheatsheet:
A; B # Run A and then B, regardless of success of A
A && B # Run B if A succeeded
A || B # Run B if A failed
A & # Run A in background.
&&
somente executa o segundo comando se o primeiro sair com status 0 (teve êxito). ;
executa ambos os comandos, mesmo que o primeiro saia com um status diferente de zero.
Seu exemplo com &&
pode ser parafraseado de forma equivalente como
if sudo apt-get update ; then
sudo apt-get install pyrenamer
fi
Usar ;
executará os comandos independentemente de o primeiro comando ser bem-sucedido ou não.
usando &&
executar o segundo comando somente quando o primeiro comando for executado com sucesso (status 0).
Ambos são usados em diferentes perspectivas. Como para um processo mais longo, digamos que para uma instalação você precisa compilá-lo e instalá-lo. você deve make && make install
. Portanto, a instalação será executada apenas se make
for bem-sucedido.
Portanto, para comandos dependentes, você deve usar &&
Wring bash, ou comandos com comandos independentes usam ;
Portanto, se você quiser desligar o computador, mesmo que o primeiro trabalho falhe, use ;
, mas se desejar obter o sucesso completo do primeiro trabalho, inicie o desligamento usando &&
a ; b
será executado b independentemente do status de saída de a. a && b
executará b apenas se for bem sucedido.
Isso é necessário e suficiente para responder às 3 primeiras perguntas. Em particular, o 2 é muito amplo e não pode receber "uma" resposta definitiva - sua melhor opção é decidir caso a caso.
Quanto à 4ª questão: Eles são a sintaxe do Bash .
Não há perigo intrínseco em usar qualquer um deles. Mais uma vez, a definição acima é suficiente. Isso significa que você escreverá &&
quando b
tiver efeitos indesejados se a
não for bem-sucedido. Não há necessidade de mais regras ou explicações, IMHO.
Tags command-line bash