Я думаю, что прерывание 0 выполняется непосредственно перед завершением сценария во всех случаях, поэтому полезно для очистки (например, удаление временных файлов и т. Д.). Другие сигналы могут иметь специальную обработку ошибок, но должны завершать сценарий (то есть вызывать выход).
То, что вы описали, я полагаю, на самом деле выполнит cmd дважды. Один раз для сигнала (например, SIGTERM) и еще раз для выхода (ловушка 0).
Я считаю, что правильный способ сделать это выглядит следующим образом (см. Спецификацию POSIX для trap
):
trap "rm tmpfile" 0
trap "exit 1" TERM HUP ...
Это гарантирует, что временный файл будет удален после завершения скрипта, и позволяет вам устанавливать собственные состояния выхода для сигналов.
ПРИМЕЧАНИЕ : ловушка 0 вызывается независимо от того, встречается сигнал или нет.
Если вас не интересует настройка статуса выхода, будет достаточно ловушки 0.