Como usar $? e teste para verificar a função?

6
    #!/bin/sh

function checkExit(){
    if test "$?" != "0"; then
      echo Command $1 exited with abnormal status
      exit 1;
    else echo $?
    fi
}

function echoThenRun () { # echo and then run the command
  echo $1
  $1
  ret=$?
  echo $ret
  return $ret
}
file=test_file
echo > $file
echoThenRun "test -f $file"
checkExit $file
echo "all right!"

A saída da execução do script:

$  ~/Downloads/test.sh 
test -f test_file
0
1 # why 1 here??
all right!
    
por simpatico 26.08.2011 / 05:14

2 respostas

8

Existe uma maneira mais simples do que você está fazendo. Se você usar set -x , o script ecoará automaticamente cada linha antes de ser executada.

Além disso, assim que você executar outro comando, $? será substituído pelo código de saída desse comando.

Você terá que fazer o backup para uma variável se você estiver fazendo algo com ela, além de um teste rápido e esqueça. O [ é, na verdade, um programa que possui seu próprio código de saída.

Por exemplo:

set -x # make sure the command echos
execute some command...
result="$?"
set +x # undo command echoing
if [ "$result" -ne 0 ]; then
    echo "Your command exited with non-zero status $result"
fi
    
por 26.08.2011 / 05:28
3

Parece que o comando test "$?" != "0" acaba definindo $? para 1. O valor $? é usado nos argumentos para test . test define $? para um valor diferente de zero porque "0" é lexicamente igual a "0". O "!=" Faz com que test retorne diferente de zero.

    
por 26.08.2011 / 05:28