Pregunta

Me gustaría probar la interceptación de la señal 1, pero no de la

#!/bin/bash
# capture an interrupt # 0
trap 'echo "Exit 0 signal detected..."' 0
trap 'echo "Exit 1 signal detected..."' SIGHUP

# display something
echo "This is a checkpoint 1"
exit 1

echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0

Output--
kithokit@15:02:55 trunk (master) $ ./test.sh 
This is a checkpoint 1
Exit 0 signal detected...
kithokit@15:03:44 trunk (master) $ 

Incluso si es la salida 1, siempre de trampa en trampa de 0, alguno sabe como resolver esto?

Gracias

¿Fue útil?

Solución

exit 1 no enviar un SIGHUP.Sale con código de retorno (también conocido como estado de salida) 1.Para enviar un SIGHUP uso kill:

#!/bin/bash
# capture an interrupt # 0
trap 'echo "Signal 0 detected..."' 0
trap 'echo "SIGHUP detected..."' SIGHUP

# display something
echo "This is a checkpoint 1"
kill -1 $$

echo "This is checkpoint 2"
# exit shell script with 0 signal
exit 0

$$ es el IDENTIFICADOR del proceso actual.Así, kill -1 $$ envía la señal 1 (SIGHUP) para el proceso actual.La salida de la secuencia de comandos anterior es:

This is a checkpoint 1
SIGHUP detected...
This is checkpoint 2
Signal 0 detected...

Cómo comprobar el código de retorno en la salida

Si el objetivo es comprobar el código de retorno (también conocido como estado de salida) en lugar de para la captura de las señales especiales, entonces todo lo que necesita hacer es comprobar el estado de la variable $? en la salida:

#!/bin/bash
# capture an interrupt # 0
trap 'echo "EXIT detected with exit status $?"' EXIT

echo "This is checkpoint 1"
# exit shell script with 0 signal
exit "$1"
echo "This is checkpoint 2"

Cuando se ejecuta desde la línea de comandos, esto produce:

$ status_catcher 5
This is checkpoint 1
EXIT detected with exit status 5
$ status_catcher 208
This is checkpoint 1
EXIT detected with exit status 208

Tenga en cuenta que la trampa de la declaración puede llamar a una función bash que podría incluir arbitrariamente complicado instrucciones para procesar diferentes códigos de retorno de manera diferente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top