Você pode usar qualquer número entre 0 e 255, exceto os códigos de saída reservados ( clique aqui para saber mais )
Eu quero saber quais valores de retorno podemos usar que não serão confundidos por ex. SIGINT?
ex .:
$sleep 10
$#hit ctrl+c
$echo $?
130
então sei que não devo usar nada como return 130
ou exit 130
então isso seria enganoso:
$function FUNC(){ return 130; };FUNC;echo $?
130
Você pode usar qualquer número entre 0 e 255, exceto os códigos de saída reservados ( clique aqui para saber mais )
O status de saída de um processo é codificado como um valor entre 0 e 255 , de modo que é tudo o que você pode usar como um código de saída. Se você passar um valor fora desse intervalo, a maioria dos shells usa o restante do módulo 256. Alguns shells permitem um intervalo maior de valores inteiros para funções.
A única regra para códigos de saída é que 0 significa sucesso e qualquer outro valor significa falha . Essa regra vai além do unix: também é uma convenção comum em outros sistemas operacionais (incluindo DOS, Windows e muitos sistemas incorporados que têm uma noção de código de saída, mas o VMS faz as coisas de maneira diferente). Em sistemas unix, ele é incorporado nas construções booleanas do shell ( if
, while
, &&
, ||
, !
, set -e
,…), em make
e seguido por todo o padrão Serviços de utilidade pública. Nos programas POSIX C, EXIT_SUCCESS
é 0 e EXIT_FAILURE
é algum não- valor zero (geralmente 1).
Não há regra (de fato ou de jure) em relação à escolha de códigos de saída para falha. Apenas alguns utilitários POSIX exigem códigos de status de falha específicos:
!
shell retornará 1 se o operando retornar 0. O operador &&
e ||
transmitirá o status do último comando. cmp
e diff
retorna 1 para arquivos diferentes e ≥2 para condições de erro. expr
retorna 1
se a expressão for avaliada como zero ou nula, 2 para uma expressão inválida e ≥3 para outros erros. grep
retorna 1 para “não encontrado” e ≥2 para condições de erro. Muitos comandos de pesquisa seguem isso (mas não find
, que retorna 0 se nenhum arquivo corresponder). mesg
retorna 0 para sim, 1 para não e ≥2 para erro. patch
retorna 1 se um grupo foi rejeitado e ≥2 para outros erros. sort -c
retorna 1 se os dados do arquivo não estiverem classificados e ≥2 para erros. compress
e localedef
define alguns valores pequenos para erros específicos. Existe uma ideia comum, mas não universal, de que valores maiores significam piores falhas. Para comandos que testam uma condição booleana como grep
(este padrão está presente?) E diff
(esses arquivos são idênticos?), 1 significa “não” e valores mais altos indicam um erro. Além disso, valores de 126 para cima raramente são usados , pois eles são incorporados ao shell (e comandos POSIX command
, env
, nice
, nohup
e time
):
$?
indicam um comando que foi finalizado por um sinal. /usr/include/sysexits.h
lista alguns valores com seus significados, mas é do sendmail e eu nunca o vi fora de programas que não estão relacionados à entrega de e-mail.
Em resumo, retorne 0 para sucesso e 1 ou 2 para falha. Se você precisar distinguir entre casos de falha, comece em 1 e aumente o valor para falhas piores.
Tecnicamente, você pode usar qualquer valor entre 0 e 255. No entanto, existem várias convenções existentes que você pode usar:
errno --list
exibe atualmente 134 erros definidos. Em geral, é uma boa ideia documentar os códigos de saída usados no script ou, pelo menos, a convenção que você está seguindo. Também pode ser útil exibir uma mensagem distinta antes de sair, como:
# using sysexits.h
echo "EX_USAGE: invalid argument: $1" > /dev/stderr
exit 64
# using errno.h
echo "ENOENT: File not found: $file" > /dev/stderr
exit 2
Tags bash shell exit function return-status