Como você define o status de saída de um script de shell?

-1

Recentemente, fiquei me perguntando como você altera o status de saída ou o status final de um script em bash . Por exemplo; digamos que corremos test.sh e dentro do programa ele sai usando exit 0 ... Eu queria saber qual seria um procedimento normal para alterar esse status de saída para dizer 1 ? Eu sei que você poderia usar exit 1 , mas este é um padrão real de configuração do status de saída?

    
por NerdOfCode 17.12.2017 / 22:19

2 respostas

1

Saída diferente de zero indica um erro. Zero indica sucesso. Tentar remover um arquivo que não existe, enquanto falha, é tão bom na maioria dos casos quanto removê-lo, então cabe ao seu script decidir se essas coisas devem ser tratadas como fracasso ou sucesso.

Então, quais números você deve usar? Em todos os meus 30 + anos usando o Unix, nunca vi um padrão. O que é importante para maior clareza se os outros estão usando seu script é que você usa apenas um único código de saída para falha ou define o significado desse código de saída. A definição pode ser incluída por muitos meios. Uma maneira é fazer eco do código de saída junto com uma lista de possíveis causas para o erro padrão, como em

echo -e "Return code Error: " $Error "\n Possible errors are\n" \
"1 = missing parameter\n" \
"2 = Could not do what you wanted \n" >&2

É claro que existem muitas alternativas, como documentar erros no código com comentários (melhor colocá-lo no script e não espalhados) ou fazer um parâmetro opcional ao script como em

$myscript -error [other parameters if any]

que imprime todos os possíveis erros.

Eu usei códigos de erro de scripts chamados por outros scripts para serem informações de retorno:

0 sendo sucesso, Positivo sendo erro, Negativo não significa erro, mas ações especiais precisam ser tomadas

Isso não é bom se o script chamado for executado diretamente, pois pode confundir o usuário, mas o script chamado pode verificar essa condição.

    
por jpezz 17.12.2017 / 23:46
3

O status de saída de um script é o status de saída do último comando que foi executado. Por exemplo, se a última instrução tentar criar um diretório com mkdir some/path e o comando falhar, então o código de saída do script em si será o código de saída da falha mkdir .

Se você quiser definir um código de saída diferente, use o exit builtin:

exit: exit [n]
    Exit the shell with a status of N.  If N is omitted, the exit status
    is that of the last command executed.

Se o seu script detectar que algo deu errado, então é recomendado que você saia com um código diferente de zero. Normalmente 1 é usado e é bom o suficiente até que você queira dar um sinal diferente para os programas de chamadas, a fim de poder responder a diferentes tipos de erros de maneira diferente. A menos que você tenha uma ideia específica em mente, basta usar exit 1 .

    
por janos 17.12.2017 / 22:26