Molti esempi da trap
utilizzare trap ... INT TERM EXIT
per le attività di pulizia. Ma è davvero necessario elencare tutti e tre i sigspec?
Il manuale dice:
Se un SIGNAL_SPEC è EXIT (0) ARG viene eseguito all'uscita dalla shell.
che credo valga se lo script è finito normalmente o è finito perché ha ricevuto SIGINT
o SIGTERM
. Un esperimento conferma anche la mia convinzione:
$ 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
Allora perché tanti esempi elencano tutti INT TERM EXIT
? O mi sono perso qualcosa e c'è un caso in cui una suola EXIT
mancherebbe?
INT TERM EXIT
il codice di pulizia viene eseguito due volte quandoSIGTERM
oSIGINT
viene ricevuto.