Pregunta

Estoy trabajando en un script de shell, y quiero manejar varios códigos de salida que podría venir a través. Para probar las cosas, estoy usando este script:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 1
exit 1;

supongo que me falta algo, pero parece que no pueda atrapar mi propia "salida 1". Si trato de atrapar 0 todo funciona:

#!/bin/sh
echo "Starting"
trap "echo \"first one\"; echo \"second one\"; " 0
exit

¿Hay algo que debo saber sobre la captura de HUP (1) código de salida?

¿Fue útil?

Solución

despachos trap en las señales del proceso recibe (por ejemplo, desde un kill), no sobre los códigos de salida, con trampa ... 0 siendo reservados para poner fin a proceso. trap /blah/blah 0 enviará a ambos exit 0 o exit 1

Otros consejos

Eso es sólo un código de salida, esto no significa que HUP. Por lo que su trap ... 1 está buscando HUP, pero la salida es sólo una salida.

Además de las señales del sistema que se puede lista realizando trap -l, puede utilizar algunos sigspecs Bash especiales: ERR, salir, volver y depurar. En todos los casos, se debe utilizar el nombre de la señal en lugar del número para facilitar la lectura.

También puede utilizar || operador, con un || b, b es ejecutado cuando un fallido

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

dosomething arg1 || failed "some comments"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top