piégeage code de sortie de l'enveloppe
-
19-09-2019 - |
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?
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"