Question

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

#!/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

Y at-il quelque chose que je devrais savoir sur le piégeage HUP (1) code de sortie?

Était-ce utile?

La solution

expéditions de trap sur les signaux du processus (par exemple, reçoit à partir d'un kill), et non sur les codes de sortie, avec piège ... 0 étant réservé pour fin de traitement. trap /blah/blah 0 enverra des deux exit 0 ou exit 1

Autres conseils

C'est juste un code de sortie, cela ne signifie pas HUP. Ainsi, votre trap ... 1 recherche HUP, mais la sortie est juste une sortie.

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

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

#!/bin/sh

failed
{
    echo "Failed $*"
    exit 1
}

dosomething arg1 || failed "some comments"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top