Nhiều ví dụ để trapsử dụng trap ... INT TERM EXITcho các nhiệm vụ dọn dẹp. Nhưng nó có thực sự cần thiết để liệt kê tất cả ba sigspec?
Hướng dẫn nói:
Nếu một TÍN HIỆU là EXIT (0) ARG được thực thi khi thoát khỏi trình bao.
mà tôi tin rằng áp dụng cho dù tập lệnh kết thúc bình thường hay nó kết thúc bởi vì nó nhận được SIGINThoặc SIGTERM. Một thí nghiệm cũng xác nhận niềm tin của tôi:
$ 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
Vậy thì tại sao nhiều ví dụ liệt kê tất cả INT TERM EXIT? Hoặc tôi đã bỏ lỡ một cái gì đó và có trường hợp nào một đế EXITsẽ bỏ lỡ?
INT TERM EXITmã dọn dẹp được thực thi hai lần khiSIGTERMhoặcSIGINTđược nhận.