Linux
0 EXIT 或 SIGEXIT 的 sigspec 還是退出?
我需要編寫一個陷阱來跟踪程序何時退出(除其他外)並刪除一個臨時文件。我更喜歡使用 sigspec 而不是 number 以獲得更好的程式碼可讀性,相關程式碼段是
trap 'rm "$temp"' 0 SIGHUP SIGTERM
sigspec
0
應該exit
是EXIT
還是SIGEXIT
?
Shell 命令語言, POSIX 規範上的陷阱讀取
條件可以是 EXIT、0(相當於 EXIT)或使用符號名稱指定的信號,不帶 SIG 前綴,如 XBD 標頭檔中定義的<signal.h>標頭檔中的信號名稱表中所列;例如,HUP、INT、QUIT、TERM。實現可能允許帶有 SIG 前綴的名稱或忽略信號名稱中的大小寫作為擴展。為 SIGKILL 或 SIGSTOP 設置陷阱會產生未定義的結果。
Bash允許以 SIG 為前綴,
信號名稱不區分大小寫,SIG 前綴是可選的。如果 sigspec 為 EXIT (0),則在退出 shell 時執行命令 arg。
但是由於 EXIT 沒有信號(請參閱
man 7 signal
或<signal.h>),即使在 Bash 中也不能使用 SIGEXIT。