Muitos exemplos para trap
uso trap ... INT TERM EXIT
em tarefas de limpeza. Mas é realmente necessário listar todos os três tipos de sigs?
O manual diz:
Se um SIGNAL_SPEC for EXIT (0), ARG será executado na saída do shell.
que eu acredito que se aplica se o script terminou normalmente ou porque recebeu SIGINT
ou SIGTERM
. Um experimento também confirma minha crença:
$ 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
Então, por que tantos exemplos listam todos INT TERM EXIT
? Ou eu perdi alguma coisa e há algum caso em que uma solteira EXIT
perca?
INT TERM EXIT
o código de limpeza, é executado duas vezes quandoSIGTERM
ouSIGINT
é recebido.