Muchos ejemplos para trap
usar trap ... INT TERM EXIT
en tareas de limpieza. Pero, ¿es realmente necesario enumerar las tres sigspecs?
El manual dice:
Si un SIGNAL_SPEC es EXIT (0) ARG se ejecuta al salir del shell.
lo cual creo que se aplica si el script terminó normalmente o si terminó porque recibió SIGINT
o SIGTERM
. Un experimento también confirma mi creencia:
$ 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
Entonces, ¿por qué tantos ejemplos enumeran todo INT TERM EXIT
? ¿O me perdí algo y hay algún caso en el EXIT
que faltaría una suela ?
INT TERM EXIT
el código de limpieza se ejecuta dos veces cuandoSIGTERM
oSIGINT
se recibe.