Linux

0 EXIT 或 SIGEXIT 的 sigspec 還是退出?

  • September 11, 2020

我需要編寫一個陷阱來跟踪程序何時退出(除其他外)並刪除一個臨時文件。我更喜歡使用 sigspec 而不是 number 以獲得更好的程式碼可讀性,相關程式碼段是

trap 'rm "$temp"' 0 SIGHUP SIGTERM

sigspec0應該exitEXIT還是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。

引用自:https://unix.stackexchange.com/questions/608956