Como faço para procurar códigos de saída para aplicativos?

6

Estou com dificuldades para localizar uma lista abrangente e atualizada de códigos de erro do Bash. por exemplo:

$ udevadm info /dev/sdx; echo Exit code $?
Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.
Exit code 4

Como alguém deve procurar esses códigos de saída?

    
por Dave Rove 17.10.2014 / 10:21

2 respostas

9

tl; dr Os códigos de saída são específicos da aplicação.

Existem algumas convenções soltas. false e qualquer coisa bem-sucedida prefixada com ! (como ! true ) em shells POSIX retorna o código de saída 1, mas um desenvolvedor pode usar qualquer código de saída entre 0 e 255 para o que quiserem. Em última análise, você tem que olhar para a sua documentação (no melhor dos casos) ou o código (no pior dos casos) para saber o que isso significa. Para programas com man páginas, os códigos de saída geralmente serão listados em uma seção chamada EXIT STATUS (ferramentas GNU como find ).

Alguns significados populares estão listados em /usr/include/sysexits.h - eu tento usá-los sempre que possível. Como @AnsgarEsztermann aponta , estas não são uma referência Bash, ou mesmo uma referência de aplicação, exceto para aqueles que optam por usá-la (desenvolvedores C / C ++, principalmente de acordo com o ABS ).

    
por 17.10.2014 / 10:27
11

Existem alguns códigos de saída com significados especiais reservados :

Exit Code Number   Meaning
1      Catchall for general errors
2      Misuse of shell builtins (according to Bash documentation)
126    Command invoked cannot execute
127    "command not found"
128+n  Fatal error signal "n"
130    Script terminated by Ctrl-C
255*   Exit status out of range

Tudo abaixo de 125 é um jogo justo para desenvolvedores e só pode ser adivinhado, como l0b0 observa em sua resposta , lendo a página man para o aplicativo, ou o código-fonte, para determinar o que o código significa (se, de fato, estiver documentado).

    
por 17.10.2014 / 10:38