Estou confuso sobre o significado do código de saída no final de um script bash: eu sei que o código de saída 0 significa que ele foi concluído com êxito e que existem muitos mais números de códigos de saída (127 se não me engano?)
Minha pergunta é sobre ao ver o código de saída 0 no final de um script, ele força o código de saída como 0, mesmo se o script falhar ou tiver outro significado?
bash
shell-script
exit
exit-status
Rebentado
fonte
fonte
exit 0
, ele será encerrado com o código de saída 0, independentemente do que acontecer dentro do script.exit 0
, ele sairá com o código 0 somente se a última instrução foi executada. O único impactoexit 0
no final do script é retornar 0 em vez do status da instrução anterior.Respostas:
O comando builtin
exit
sai do shell ( da referência do Bash ):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 à finalexit
.) No final de um script, você também pode usartrue
ou:
obter um código de saída zero.É claro que você usaria mais frequentemente
exit
de dentro deif
para finalizar o script no meio.Eles devem imprimir 1 (
$?
contém o código de saída retornado pelo comando anterior):Enquanto isso deve imprimir um 0:
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.fonte
$?
para 128 + signum nesse caso. Consulte Código de saída padrão quando o processo for finalizado? para detalhes.exit 0
retornará apenas 0, se a saída for executada. (poderia sair por uma rota diferente).0 significa sucesso, números inteiros positivos significam falha. Existem 255 códigos de erro diferentes, mas os valores 126 e acima são reservados para indicar que um programa não pôde ser iniciado (126 ou 127) ou foi morto por um sinal (129 e acima). Consulte Código de saída padrão quando o processo for finalizado? e Quais valores de retorno / saída posso usar nas funções / scripts do bash? Para maiores informações.
O status de saída de um script de shell é o status de saída do último comando que o script executou. Então por exemplo
retorna o status de saída de
somecommand
, enquantoretorna 0, independentemente do que
somecommand
retornou. Este segundo script também pode ser escritoColocar
exit 0
no final de um script não necessariamente faz com que ele retorne 0. Isso apenas o faz retornar 0 quando o final do script é atingido. Por exemplo, o seguinte script sempre retorna 3:O script a seguir também sempre retorna um código de erro, além de exibir uma mensagem sobre um erro de sintaxe:
O script a seguir retorna 1 ou 0, dependendo do seu primeiro argumento:
O script a seguir retorna o status de
somecommand
, poisset -e
faz com que o script saia sesomecommand
falhar:fonte