Acabei de fazer uma pergunta sobre a bifurcação de um processo para dormir no backgroud.
A notação que eu criei é assim:
sleep 10 && echo "hello world" &
Esta resposta a uma pergunta diferente usa um formato diferente.
( sleep 10 ; echo "hello world" ) &
Eu sei que &&
só permite que o segundo processo seja iniciado se o primeiro retornar verdadeiro. O sono pode falhar? Existe uma situação em que devo preferir um ao outro?
shell
background-process
sleep
Baarn
fonte
fonte
Respostas:
O sono pode falhar se for finalizado durante a execução:
Como o sleep é um executável externo, também é possível que as chamadas fork ou exec possam falhar, o que também faria com que o bash gerasse um código de erro> 0.
fonte
a; b
sempre executa o segundo comando após o primeiro, enquanto quea && b
executa o segundo comando apenas se o primeiro for bem-sucedido, ou seja, apenas se o primeiro comando retornar o status 0.sleep
sempre retorna o status 0, exceto quando é morto por um sinal; nesse caso, o status é 128 + número do sinal. (O status também pode ser 126 ou 127 se osleep
comando não existir ou o programa não puder iniciar devido à falta de recursos, mas é improvável que você encontre esses casos.)Portanto, você deve usar
;
ou&&
dependendo do que deseja que aconteça se o sono for interrompido:sleep 10; echo hello
imprime a mensagem após 10 segundos (menos sesleep
for morto por um sinal);sleep 10 && echo hello
imprime a mensagem após 10 segundos, mas nada imprime sesleep
for morto por um sinal.fonte
Você deve assumir que qualquer comando pode falhar por vários motivos, mesmo que a suspensão do sono seja realmente muito improvável.
significa suspensão de segundo plano e executar eco após o processo de suspensão, mas se a suspensão falhar, o eco será executado mesmo assim, veja a explicação completa
significa que você precisa aguardar o final do sono antes de repetir qualquer coisa e, se o eco falhar, o processo será interrompido, mas todo o comando também ficará em segundo plano. ver explicação completa
Conclusão A
primeira sintaxe é o shell script, o que significa que está considerando instruções separadamente como uma lista.
A segunda opção usa && significa AND, portanto, se você a usar no primeiro comando falhar, o segundo não será executado.
Esse é apenas um comportamento diferente ao lidar com erros.
fonte