O comando builtin exit
sai do shell ( da referência do Bash ):
exit [n]
Saia do shell, retornando um status de n ao pai do shell. Se n for omitido, o status de saída é o do último comando executado. Qualquer interceptação em EXIT é executada antes que o shell termine.
A execução para o final do arquivo também sai, retornando o código de retorno do último comando; portanto, uma final exit 0
fará com que o script saia com status bem-sucedido, independentemente do status de saída dos comandos anteriores. (Ou seja, supondo que o script chegue à final exit
.) No final de um script, você também pode usar true
ou :
obter um código de saída zero.
É claro que você usaria mais frequentemente exit
de dentro de if
para finalizar o script no meio.
Eles devem imprimir 1 ( $?
contém o código de saída retornado pelo comando anterior):
sh -c "false" ; echo $?
sh -c "false; exit" ; echo $?
Enquanto isso deve imprimir um 0:
sh -c "false; exit 0" ; echo $?
Não tenho certeza se o conceito do script "falhando" ao executar um exit
faz sentido, pois é bem possível que alguns comandos executados pelo script falhem, mas o próprio script seja bem-sucedido. Cabe ao autor do script decidir o que é um sucesso e o que não é.
Além disso, o intervalo padrão para códigos de saída é 0..255. Os códigos acima de 127 são usados pelo shell para indicar um processo encerrado por um sinal, mas podem ser retornados da maneira usual. A wait
chamada do sistema realmente retorna um valor mais amplo, com o restante contendo os bits de status definidos pelo sistema operacional.
exit 0
, ele será encerrado com o código de saída 0, independentemente do que acontecer dentro do script.