Wiele przykładów trapużycia trap ... INT TERM EXITdo zadań czyszczenia. Ale czy naprawdę trzeba wymienić wszystkie trzy sigspecy?
Instrukcja mówi:
Jeśli SIGNAL_SPEC to EXIT (0), ARG jest wykonywane przy wyjściu z powłoki.
które moim zdaniem ma zastosowanie niezależnie od tego, czy skrypt zakończył się normalnie, czy zakończył się, ponieważ otrzymał SIGINTlub SIGTERM. Eksperyment potwierdza również moje przekonanie:
$ cat ./trap-exit
#!/bin/bash
trap 'echo TRAP' EXIT
sleep 3
$ ./trap-exit & sleep 1; kill -INT %1
[1] 759
TRAP
[1]+ Interrupt ./trap-exit
$ ./trap-exit & sleep 1; kill -TERM %1
[1] 773
TRAP
[1]+ Terminated ./trap-exit
Dlaczego więc tak wiele przykładów wymienia wszystkie z nich INT TERM EXIT? A może coś mi umknęło i czy jest jakikolwiek przypadek, w którym EXITbrakowałaby podeszwa ?
INT TERM EXITkod czyszczenia jest wykonywany dwukrotnie, gdySIGTERMlubSIGINTjest odbierany.