Existe uma maneira de fazer o que está indicado no título a partir dos comandos do terminal, ou terei que examinar os códigos?
command
documentation
exit
preciso
fonte
fonte
Os códigos de saída indicam uma condição de falha ao finalizar um programa e caem entre 0 e 255. O shell e seus componentes internos podem usar especialmente os valores acima de 125 para indicar modos de falha específicos; portanto, a lista de códigos pode variar entre shells e sistemas operacionais (por exemplo, Bash usa o valor 128 + N como o status de saída). Consulte: Bash - 3.7.5 Status de saída ou
man bash
.Em geral, um status de saída zero indica que um comando foi bem-sucedido , um status de saída diferente de zero indica falha .
Para verificar qual código de erro é retornado pelo comando, você pode imprimir
$?
o último código de saída ou${PIPESTATUS[@]}
qual fornece uma lista de valores de status de saída do pipeline (no Bash) após a saída de um script de shell.Não há uma lista completa de todos os códigos de saída que podem ser encontrados, no entanto, houve uma tentativa de sistematizar os números de status de saída na fonte do kernel, mas isso é principalmente destinado aos programadores de C / C ++ e pode ser apropriado um padrão semelhante para scripts.
Alguma lista de sysexits no Linux e no BSD / OS X com códigos de saída preferenciais para programas (64-78) pode ser encontrada em
/usr/include/sysexits.h
(ou:man sysexits
no BSD):A lista acima aloca códigos de saída não utilizados anteriormente de 64 a 78. O intervalo de códigos de saída não atribuídos será ainda mais restrito no futuro.
No entanto, os valores acima são usados principalmente no sendmail e usados por praticamente ninguém, portanto, eles não são nada remotamente próximos de um padrão (como apontado pelo @Gilles ).
No shell, o status de saída é o seguinte (com base no Bash):
1
-125
- O comando não foi concluído com sucesso. Verifique na página do manual do comando o significado do status, alguns exemplos abaixo:1
- Catchall para erros geraisExemplo:
2
- Uso indevido de componentes internos do shell (de acordo com a documentação do Bash)Exemplo:
6
- Esse dispositivo ou endereço não existeExemplo:
124
- tempo limite do comando125
- se um comando falhar, veja: coreutils126
- se o comando for encontrado, mas não puder ser chamado (por exemplo, não é executável)Exemplo:
127
- se um comando não puder ser encontrado, o processo filho criado para executá-lo retornará esse statusExemplo:
128
- Argumento inválido paraexit
Exemplo:
128
-254
- sinal de erro fatal "n" - o comando morreu devido ao recebimento de um sinal. O código do sinal é adicionado a 128 (128 + SIGNAL) para obter o status (Linuxman 7 signal
:, BSD:)man signal
, alguns exemplos abaixo:130
- comando finalizado devido à pressão do Ctrl-C, 130-128 = 2 (SIGINT)Exemplo:
137
- se o comando receber oKILL(9)
sinal (128 + 9), o status de saída do comando, caso contrário141
-SIGPIPE
- escreva em um tubo sem leitorExemplo:
143
- comando terminado pelo código de sinal 15 (128 + 15 = 143)Exemplo:
255
* - sai do status fora da faixa.Exemplo:
Observe que os valores de saída fora da faixa podem resultar em códigos de saída inesperados (por exemplo, a saída 3809 fornece um código de saída 225, 3809% 256 = 225).
Vejo:
fonte
errno
os valores são usados pelas APIs do sistema, não são usados como status de saída (nem estão no intervalo certo) e são irrelevantes para scripts de shell. Os valores do Sysexits são do sendmail e usados por praticamente ninguém, eles não são nada remotamente próximos de um padrão.Você precisará examinar o código / documentação. No entanto, o que mais se aproxima de uma "padronização" é errno.h
fonte
errno.h
é irrelevante quando se trata de códigos de saída, apenas mensagens de erro.sysexits.h
. No entanto, alguns programas retornamerrno
s, e acho que retornarerrno
s faz mais sentido. Oserrno
s não manipulados propagam-se para cima, como exceções (aserrno
permanências, funções retornam, por exemplo,-1
ou0|NULL
). Como os programas são apenas funções, embora sejam executadas em um espaço de endereço separado, faz sentido que um programa possa desejar continuar aerrno
propagação através do limite do processo."($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
.Até onde eu sei, existem apenas dois valores padrão, mais ou menos, ambos definidos em
stdlib.h
para uso com exit ():E o único valor padrão de fato, ou seja, tendo o mesmo significado para todos os programas do mundo, é 0 (zero), que significa SUCESSO.
Programas diferentes introduzem listas diferentes de códigos de "falha" retornados para distinguir ou enfatizar erros diferentes (tipos ou gravidade diferentes). Alguns programas até usam o valor retornado para relatar o número inteiro de erros de tempo de execução descobertos (por exemplo, o número de testes de unidade com falha no processo).
Eu não recomendaria introduzir nenhum tipo de "novo padrão" estendendo o
stdlib.h
fonte