código de saída 128, qual é o motivo?

3

Conforme o código de saída de definição 128 significa 'argumento de saída inválido'. Mas eu sempre consigo 255 (sair do status fora do intervalo) no caso de argumento é inválido como o número float.

Esta é a implementação proprietária na minha distribuição linux?

# exit 1.234
exit
bash: exit: 1.234: numeric argument required

$ echo $?
255   //this should be 128?

# exit -1
exit

$ echo $?
255   //this is okay
    
por P K 29.12.2011 / 08:41

2 respostas

4

Não há nada dentro da documentação do Bash que diz que 128 é o código de saída inválido necessário.

Bash itself returns the exit status of the last command executed, unless a syntax error occurs, in which case it exits with a non-zero value.

O último comando é o bash embutido exit (da página man)

exit [n]

Cause the shell to exit with a status of n. If n is omitted, the exit status is that of the last command executed.

Verificou a especificação para o WEXITSTATUS.

WEXITSTATUS(stat_val)

If the value of WIFEXITED(stat_val) is non-zero, this macro evaluates to the low-order 8 bits of the status argument that the child process passed to _exit() or exit(), or the value the child process returned from main().

Portanto, a saída é restrita a um inteiro de 8 bits (0 - 255), portanto, -1 seria 255 . Sair só entende um argumento inteiro e não flutua, por isso é provável que saia um padrão -1 .

bash$ echo $BASH_VERSION
4.1.10(4)-release

bash$ exit foo
exit
bash: exit: foo: numeric argument required
$ echo $?    
255

bash$ exit 2
exit
$ echo $?
2

bash$ exit -2
exit
$ echo $?
254
    
por 29.12.2011 / 09:57
1

Isso é específico para sua variante shell. Este link ou o link não confirma sua impressão de que 128 é um código de saída especial.

Para exit 3.45 minhas versões de ksh e zsh retornam 3, tcsh retorna 1 (na verdade não sai), e ash retorna 2 (mas também não sai de fato).

    
por 29.12.2011 / 09:36