Por que o status de saída é sempre 0 no início de um script?

0

Eu tenho um script como este, chamado judge :

#!/bin/bash
echo "last exit status is $?"

Sempre produz "o último status de saída é 0". Por exemplo:

ls -l;   judge # correctly reports 0
ls -z;   judge # incorrectly reports 0
beedogs; judge # incorrectly reports 0

Por quê?

    
por Nathan Long 09.03.2016 / 18:07

2 respostas

2

Existem diferentes processos bash executando cada linha de código e $? não é compartilhado entre os processos. Você pode resolver isso fazendo judge uma função bash:

[root@xxx httpd]# type judge
judge is a function
judge ()
{
    echo "last exit status is $?"
}
[root@xxx httpd]# ls -l / >/dev/null 2>&1; judge
last exit status is 0
[root@xxx httpd]# ls -l /doesntExist >/dev/null 2>&1; judge
last exit status is 2
[root@xxx httpd]#
    
por 09.03.2016 / 18:28
1

Como discutido nos comentários, o $? variável mantém o valor do último processo que retornou um valor para o shell.

Se judge precisar fazer algo com base em um estado de comando anterior, você poderá aceitar um parâmetro e passar o estado.

#!/bin/bash
echo "last exit status is $1"
# Or even 
return $1

Então:

[cmd args...]; judge $?
    
por 09.03.2016 / 18:24

Tags