是 EXIT、DEBUG、RETURN 和 ERR 信号吗?

Tim*_*Tim 16 bash signals

trap在bash内置的语法如下

trap [-lp] [arg] [sigspec ...]
Run Code Online (Sandbox Code Playgroud)

... 每个sigspec都是信号名称或信号编号。信号名称不区分大小写,SIG 前缀是可选的。

...

bash的说明书指出,sigspec可能是EXITDEBUGRETURN,和ERR。它们是信号的名称吗?

为什么我在下面给出的所有信号名称列表中找不到它们,甚至SIG为它们添加前缀?

它们仅与 bash shell 相关,而与 Linux 操作系统无关吗?它们是 bash shell 信号而不是 Linux OS 信号吗?

$ trap -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    
Run Code Online (Sandbox Code Playgroud)

谢谢。

seb*_*sth 20

这些名称在 bash 中具有特殊含义,手册中对其用法进行了解释:

如果 sigspec 为 0 或 EXIT,则在 shell 退出时执行 arg。如果 sigspec 是 DEBUG,则命令 arg 在每个简单命令、for 命令、case 命令、select 命令、命令的每个算术运算之前以及在 shell 函数中执行第一个命令之前执行...

如果 sigspec 为 ERR,则只要管道(可能由单个简单命令组成)、列表或复合命令返回非零退出状态,就会执行命令 arg,但须符合以下条件...


Hau*_*ing 15

这些不是信号,但trap在某些其他情况下使用该机制也是有意义的。这些名称仅在 bash 中有意义。

  • @HaukeLaging 从技术上(和迂腐)来说,它使句子“这些名称在`bash` **only** 中有意义”不正确。 (5认同)