Wiele przykładów trap
użycia trap ... INT TERM EXIT
do 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ł SIGINT
lub 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 EXIT
brakowałaby podeszwa ?
INT TERM EXIT
kod czyszczenia jest wykonywany dwukrotnie, gdySIGTERM
lubSIGINT
jest odbierany.