Qual é a diferença entre "e" comercial e ponto e vírgula no Linux Bash ?
Por exemplo,
$ command1 && command2
vs
$ command1; command2
Qual é a diferença entre "e" comercial e ponto e vírgula no Linux Bash ?
Por exemplo,
$ command1 && command2
vs
$ command1; command2
Respostas:
O &&
operador é um operador booleano AND: se o lado esquerdo retorna um status de saída diferente de zero, o operador retorna esse status e não avalia o lado direito (causa um curto-circuito), caso contrário, avalia o lado direito e retorna seu status de saída . Isso é comumente usado para garantir que command2
seja executado apenas se command1
executado com êxito.
O ;
token apenas separa os comandos, então ele executará o segundo comando, independentemente de o primeiro ser bem-sucedido ou não.
&&
diferente de um único e comercial &
no bash?
&
faz com que o comando seja executado em segundo plano, então sim. "Executar em segundo plano" é muito diferente de "executar este próximo comando apenas se este outro for bem-sucedido".
command1 && command2
executa command2
se (e somente se) a command1
execução terminar com sucesso. No jargão do Unix, isso significa código de saída / código de retorno igual a zero.
command1; command2
executa command2
após a execução command1
, sequencialmente. Não importa se os comandos foram bem-sucedidos ou não.
O primeiro é uma lógica simples que AND
usa avaliação de curto-circuito, o último simplesmente delimita dois comandos.
O que acontece na realidade é que quando o primeiro programa retorna um código de saída diferente de zero, o todo AND
é avaliado FALSE
e o segundo comando não é executado. O último simplesmente executa os dois em ordem.