Banyak contoh untuk trapdigunakan trap ... INT TERM EXITuntuk tugas pembersihan. Tetapi apakah benar-benar perlu untuk mendaftar ketiga sigspec?
Manual mengatakan:
Jika SIGNAL_SPEC EXIT (0) ARG dijalankan saat keluar dari shell.
yang saya percaya berlaku apakah skrip selesai secara normal atau selesai karena diterima SIGINTatau SIGTERM. Eksperimen juga menegaskan keyakinan saya:
$ 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
Lalu mengapa begitu banyak contoh mendaftar semuanya INT TERM EXIT? Atau apakah saya melewatkan sesuatu dan apakah ada kasus di mana solonya EXITakan terlewatkan?
INT TERM EXITkode pembersihan dijalankan dua kali ketikaSIGTERMatauSIGINTditerima.