set -e
(o un script que comience por #!/bin/sh -e
) es extremadamente útil para bombardear automáticamente si hay un problema. Me ahorra tener que comprobar el error de cada comando que pueda fallar."set -e" en una función
¿Cómo obtengo el equivalente de esto dentro de una función?
Por ejemplo, tengo la siguiente secuencia de comandos que sale inmediatamente en caso de error con un código de salida de error:
#!/bin/sh -e
echo "the following command could fail:"
false
echo "this is after the command that fails"
La salida es el esperado:
the following command could fail:
Ahora me gustaría para envolver esto en una función:
#!/bin/sh -e
my_function() {
echo "the following command could fail:"
false
echo "this is after the command that fails"
}
if ! my_function; then
echo "dealing with the problem"
fi
echo "run this all the time regardless of the success of my_function"
Resultados previstos:
the following command could fail:
dealing with the problem
run this all the time regardless of the success of my_function
salida real:
the following output could fail:
this is after the command that fails
run this all the time regardless of the success of my_function
(es decir. la función ignora set -e
)
Se espera que este comportamiento sea el esperado. Mi pregunta es: ¿cómo obtengo un efecto y uso sin set -e
dentro de una función de shell? He encontrado the same question preguntado fuera de Stack Overflow pero no hay una respuesta adecuada.
Sí, me doy cuenta de que puedo hacer esto, pero no me gusta. Es complicado, es muy fácil perder uno al modificar la función más tarde, y se complica cuando se trata de otras construcciones de shell y con flujo de control. El objetivo de 'set -e' es evitar tener que hacer esto. Sin embargo, aceptaré la respuesta "¡no existe tal mecanismo!" –