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]#