Saída do programa quando retornar em uma função

1

Este é um resumo do meu código.

ninja ()
{
  if $1 = toto
  then
  return 1
  elif $1 = tata
  then
  return 4
  fi
}

main () {
  ninja "tata"
  if [ $? -ne 1 ]
  then
    somecode
  fi
}

main "$@"

Por nenhuma razão, quando minha função retorna alguma coisa, o programa simplesmente sai (eu testei com um trap EXIT), a função retorna 4 e executa o trap.

Obrigado pela sua ajuda.

Editar: funciona quando eu comentar

set -o errexit
set -o errtrace

Mas como posso encontrar o erro?

    
por Chuck Noxis 03.11.2016 / 18:33

1 resposta

1

Se você quiser testar esse argumento de função equivalente a alguma string, você deve usar a construção if [ "$x" == "string" ] , então seu código será parecido com:

test () {
  if [ "$1" == "toto" ] then
    return 1
  elif [ "$1" == "tata" ] then
    return 4
  fi
}

main () {
  test "tata"
  if [ $? -ne 1 ] then
    echo "somecode"
  fi
}

main "$@"

E você pode usar test name para a função. Se você quiser chamar builtin test , use builtin test construct.

E tome cuidado com = (atribuição) e == (comparação). Dentro do teste [ e ] o operador = funciona como == e testa a igualdade da cadeia (não os números).

set -o errexit sai imediatamente após o comando retornar diferente de zero (sem êxito). Seu ninja retorna 1 (que é diferente de zero) e sai.

Seu código sem testes não está funcionando porque if declaração tenta executar instruções e determinar o estado de saída do comando: se o estado de saída for zero (sucesso), execute instruções após then till elif de fi .

    
por 03.11.2016 / 19:07