Sind EXIT-, DEBUG-, RETURN- und ERR-Signale?


14

Die trapeingebaute Bash hat die folgende Syntax

trap [-lp] [arg] [sigspec ...]

... Jedes sigspecist entweder ein Signalname oder eine Signalnummer. Bei Signalnamen wird die Groß- und Kleinschreibung nicht berücksichtigt, und das SIG-Präfix ist optional.

...

Die bash Handbuch weist darauf hin , dass sigspecsein kann EXIT, DEBUG, RETURN, und ERR. Sind sie Namen von Signalen?

Warum finde ich sie nicht in der Liste aller unten angegebenen Signalnamen, auch wenn ich ihnen ein Präfix hinzufüge SIG?

Haben sie nur mit Bash-Shells zu tun, aber nicht mit Linux-Betriebssystemen? Sind sie Bash-Shell-Signale, aber keine Linux-OS-Signale?

$ 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    

Vielen Dank.

Antworten:


19

Diese Namen haben eine besondere Bedeutung in bash, für die die Verwendung im Handbuch erklärt wird :

Wenn ein Sigspec 0 oder EXIT ist, wird arg ausgeführt, wenn die Shell beendet wird. Wenn eine Sigspec DEBUG ist, wird das Kommando arg vor jedem einfachen Kommando für Kommando, case Kommando, select Kommando, jeder Arithmetik für Kommando und vor dem ersten Kommando in einer Shell-Funktion ausgeführt ...

Wenn eine Sigspec ERR ist, wird der Befehl arg immer dann ausgeführt, wenn eine Pipeline (die aus einem einzelnen einfachen Befehl bestehen kann), eine Liste oder ein zusammengesetzter Befehl einen Exit-Status ungleich Null zurückgibt, sofern folgende Bedingungen erfüllt sind ...


14

Dies sind keine Signale, aber es ist sinnvoll, den trapMechanismus auch für bestimmte andere Situationen zu verwenden. Diese Namen haben nur innerhalb der Bash Bedeutung.


1
Der EXITTrap wird jedoch von POSIX angegeben.
Kusalananda

@Kusalananda Ich meinte nicht, dass andere Shells dies nicht unterstützen.
Hauke ​​Laging

3
@HaukeLaging Technisch (und pedantisch) ergibt sich der Satz "Diese Namen haben eine Bedeutung in bash nur " falsch.
Pharap
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.