Penso che trap 0 sia eseguito appena prima della terminazione dello script in tutti i casi, quindi è utile per la funzionalità di pulizia (come la rimozione di file temporanei, ecc.). Gli altri segnali possono avere una gestione specializzata degli errori, ma dovrebbero terminare lo script (cioè, call exit).
Quello che hai descritto, credo, eseguirà effettivamente cmd due volte. Una volta per il segnale (ad esempio SIGTERM) e ancora una volta in uscita (trap 0).
Credo che il modo corretto per farlo è simile al seguente (vedi specifiche POSIX per trap
):
trap "rm tmpfile" 0
trap "exit 1" TERM HUP ...
Questo assicura un file temporaneo viene rimosso dopo il completamento dello script, e consente di impostare gli stati di uscita personalizzato segnali.
NOTA: trap 0 viene chiamato se viene rilevato o meno un segnale.
Se non si è interessati all'impostazione di uno stato di uscita, il trap 0 sarebbe sufficiente.
fonte
2011-11-14 14:29:01
Questa è una buona idea. Non credo sia necessario preoccuparsi dei segnali con più di una trappola definita, dal momento che è possibile definire solo una trappola per segnale. (La seconda trappola sostituisce la prima, piuttosto che l'aggiunta a una pila.) Alcune shell consentono di definire più trap? –
Ero sotto la stessa confusione di @WilliamPursell fino a quando ho finalmente notato "ignorato ** o ** reset". –