2010-01-08 14 views
3

Je travaille sur un script shell, et je veux gérer les différents codes de sortie que je pourrais rencontrer. Pour essayer des choses, je suis en utilisant ce script:piégeage shell shell code

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

Je suppose que je manque quelque chose, mais il semble que je ne peux pas mon propre piège « exit 1 ». Si je tente de piéger 0 tout fonctionne:

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

Est-ce que je devrais savoir sur le piégeage HUP (1) code de sortie?

Répondre

5

trap répartit les signaux reçus par le processus (par exemple, à partir d'un kill), et non sur les codes de sortie, le trap ... 0 étant réservé à la fin du processus. trap /blah/blah 0 va envoyer sur soit exit 0 ou exit 1

0

Vous pouvez également utiliser || opérateur, avec un || b, b est exécuté en cas d'échec

#!/bin/sh 

failed 
{ 
    echo "Failed $*" 
    exit 1 
} 

dosomething arg1 || failed "some comments" 
2

Ceci est juste un code de sortie, cela ne signifie pas HUP. Donc, votre trap ... 1 cherche HUP, mais la sortie est juste une sortie.

En plus des signaux système que vous pouvez lister en faisant trap -l, vous pouvez utiliser des sigspecs Bash spéciaux: ERR, EXIT, RETURN et DEBUG. Dans tous les cas, vous devez utiliser le nom du signal plutôt que le numéro pour plus de lisibilité.