Valor de retorno de um processo e comparação do número

5

Eu tenho um script val.py python que retorna um número negativo.

import sys
sys.exit(-1234)

Quando executo este script, recebo o valor $? como valor de retorno de 46 (não -1234). Mesmo quando tentei comparar o valor com $? == 46 ou $? == "46" , ele não funciona.

python val.py
echo $?

if [ $? == 46 ]; then
    echo "Match"
else
    echo "NO"
fi
  • P1: Por que o valor de retorno não é armazenado corretamente em $? ?
  • Q2: Por que o $? == NUMBER comparação não funciona?
por prosseek 02.10.2011 / 21:27

1 resposta

12

O status passado para exit() por um processo é mascarado para um único byte, por isso está limitado ao intervalo [0-255] . Veja a documentação sobre exit :

The value of status may be 0, EXIT_SUCCESS, EXIT_FAILURE, or any other value, though only the least significant 8 bits (that is, status & 0377) shall be available to a waiting parent process.

Em duas implementações de complemento, -1234d == 0x...ffffb2e e 0x2e == 46d , o resultado esperado é esperado.

Para sua segunda pergunta, você if statement está testando o status de saída de echo $? , não o do seu programa python.

Tente:

python val.py
rc=$?
echo $rc
if [ $rc == 46 ] ; then
...
    
por 02.10.2011 / 21:39

Tags