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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top