
Este es un extracto de mi 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 "$@"
Sin ningún motivo, cuando mi función devuelve algo, el programa simplemente sale (lo he probado con una trampa EXIT), la función devuelve 4 y ejecuta la trampa.
Editar: funciona cuando comento
set -o errexit
set -o errtrace
Pero, ¿cómo puedo encontrar el error?
Respuesta1
Si desea probar el argumento de esa función equivalente a alguna cadena, debe usar construct if [ "$x" == "string" ]
, entonces su código se verá así:
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 "$@"
Y podrías usar test
el nombre de la función. Si desea llamar a buildin test
, utilice builtin test
construct.
Y ocúpate de =
(tarea) y ==
(comparación). Dentro de la prueba [
, ]
el =
operador funciona ==
y prueba la igualdad de cadenas (no los números).
set -o errexit
sale inmediatamente después de que el comando devuelve un valor distinto de cero (no exitoso). Tus ninja
retornos 1
(que no son cero) y salida.
Su código sin pruebas no funciona porque if
la declaración intenta ejecutar instrucciones en él y determinar el estado de salida del comando: si el estado de salida es cero (éxito), ejecute las instrucciones después de then
hasta elif
el fi
.