Много примеров для trap
использования trap ... INT TERM EXIT
в задачах очистки. Но действительно ли необходимо перечислять все три сигсипа?
В руководстве сказано:
Если SIGNAL_SPEC - EXIT (0), ARG выполняется при выходе из оболочки.
что, я считаю, применимо независимо от того, закончился ли скрипт нормально или он закончился, потому что получил SIGINT
или SIGTERM
. Эксперимент также подтверждает мою веру:
$ 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
Тогда почему так много примеров перечисляют все INT TERM EXIT
? Или я что-то пропустил и есть ли случай, когда подошва EXIT
пропустит?
INT TERM EXIT
код очистки, выполняется дважды, когдаSIGTERM
илиSIGINT
получен.