Comment piège de sortie du signal 1 en script Shell?
Question
Je voudrais essayer de piégeage du signal 1, mais ne parviennent pas
#!/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) $
Même si elle est sortie 1, il est toujours de piège en piège, 0, quelqu'un sait comment résoudre ce problème?
Merci
La solution
exit 1
ne pas envoyer un signal SIGHUP.Il sort avec code de retour (AKA statut de sortie) 1.Pour envoyer un signal SIGHUP utilisation 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
$$
est l'ID du processus courant.Donc, kill -1 $$
envoie le signal 1 (SIGHUP) pour le processus en cours.La sortie du script ci-dessus est:
This is a checkpoint 1
SIGHUP detected...
This is checkpoint 2
Signal 0 detected...
Comment vérifier le code de retour sur la sortie
Si le but est de vérifier le code de retour (aussi connu comme la sortie d'état) plutôt que d'attraper les signaux particuliers, alors tout ce que nous devons faire est de vérifier le statut de variable $?
à la sortie:
#!/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"
Lors de l'exécuter à la ligne de commande, cela donne:
$ 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
Notez que le piège instruction peut appeler un bash qui pourrait inclure arbitrairement complexe instructions pour traiter les différents codes de retour différemment.