Estoy buscando el mecanismo de manejo de excepciones en el script de shell. ¿Hay alguna prueba, capturar un mecanismo equivalente en el script de shell?¿Manejo de excepciones en scripts de shell?
Respuesta
No hay realmente un try/catch
en bash (supongo que estás usando bash), pero puedes lograr un comportamiento bastante similar usando &&
o ||
.
En este ejemplo, desea ejecutar fallback_command
si a_command
falla (devuelve un valor distinto de cero):
a_command || fallback_command
Y en este ejemplo, se desea ejecutar second_command
si a_command
es exitosa (devuelve 0):
a_command && second_command
que fácilmente se pueden mezclar entre sí mediante el uso de una subcapa, por ejemplo, la Follo comando ala ejecutará a_command
, si tiene éxito se ejecute other_command
, pero si a_command
o other_command
falla, fallback_command
será ejecutada:
(a_command && other_command) || fallback_command
Bonus: si quieres " finalmente "como comportamiento, use el no-op (: en bash) como este:' (a_command ||:) 'y la siguiente línea se ejecutará como si no hubiera ningún error en' a_command'. –
La estructura if/else y salida códigos te pueden ayudar falso algo de él. Esto debería funcionar en Bash o Bourne (sh).
if foo ; then
else
e=$? # return code from if
if [ "${e}" -eq "1"]; then
echo "Foo returned exit code 1"
elif [ "${e}" -gt "1"]; then
echo "Foo returned BAD exit code ${e}"
fi
fi
'if foo; luego else' se puede simplificar a 'if! foo; then', +1 de todos modos. – jlliagre
@jiliagre Eso no funciona. "! foo" invierte $? de 0 a 1 y! 0 a 0. – brightlancer
De hecho. Pasé por alto el procesamiento del código de retorno. – jlliagre
Éstos son two simple bashfunctions which enable eventhandling en bash:
se podría utilizar para ExceptionHandling básico como esto:
onFoo(){
echo "onFoo() called width arg $1!"
}
foo(){
[[ -f /tmp/somefile ]] || throw EXCEPTION_FOO_OCCURED "some arg"
}
addListener EXCEPTION_FOO_OCCURED onFoo
ExceptionHandling utilizando bloques try/catch no se admite en bash, sin embargo, es posible que Quiero probar mirando el marco BANGSH que lo soporta (es un poco como jquery para bash).
Sin embargo, ExceptionHandling sin derramamiento try/catch-bloques es similar a eventhandling, que es posible en casi cualquier lenguaje con el arreglo de apoyo.
Si desea mantener su código limpio y ordenado (sin if/else verbosity), le recomendaría utilizar eventos.
La sugerencia la que recomienda MatToufoutu (usando || y & &) no se recomienda para las funciones, pero bien para comandos simples. (Ver BashPitfalls sobre los riesgos)
{
# command which may fail and give an error
} || {
# command which should be run instead of the above failing command
}
Probablemente sería 'mejor' si le explicaste a la persona que hace la pregunta, el pseudo-código que publicas en lugar de solo un bloque de código críptico que pueden no entender. Si un niño no puede entenderlo, no es una buena respuesta. – Yokai
- 1. Manejo de confirmaciones de entrada en scripts de shell Linux
- 2. Manejo de excepciones JSF2
- 3. manejo de excepciones ofstream
- 4. Wcf manejo de excepciones
- 5. Manejo de excepciones en linux
- 6. Manejo de excepciones en hilos
- 7. manejo de excepciones en C#
- 8. Manejo de excepciones AOP
- 9. Manejo de múltiples excepciones
- 10. BackgroundWorker manejo de excepciones
- 11. Compiladores para scripts de shell
- 12. Forma preferida de #! en scripts de shell
- 13. Manejo de excepciones de nodo
- 14. Patrón de manejo de excepciones
- 15. XMLHttpRequest.open() el manejo de excepciones
- 16. ASP.NET MVC manejo de excepciones
- 17. Python: Queue.Empty manejo de excepciones
- 18. Funciones anónimas en scripts de shell
- 19. ejecutan los scripts de shell en C++
- 20. Expresiones booleanas en scripts de shell
- 21. Buscar y reemplazar en scripts de shell
- 22. Robusto manejo de excepciones Javascript
- 23. Política de manejo de excepciones en bibliotecas
- 24. Python httplib2 Manejo de excepciones
- 25. Manejo de excepciones para ThreadPoolExecutor
- 26. Python solicita manejo de excepciones
- 27. manejo de excepciones en node.js y express
- 28. Sobrecarga del manejo de excepciones en D
- 29. Manejo de excepciones generales en C#
- 30. Manejo elegante de excepciones en Swing Worker
relacionadas: [Podría alguien explicar este try/alternativo de captura en bash?] (Http://stackoverflow.com/q/14964529/320399) – blong