Являются ли сигналы EXIT, DEBUG, RETURN и ERR?


14

trapВстроенный в Баш имеет следующий синтаксис

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

... Каждый из них sigspecявляется либо именем сигнала, либо номером сигнала. Имена сигналов нечувствительны к регистру, а префикс SIG является необязательным.

...

Баш вручную указывает, что sigspecможет быть EXIT, DEBUG, RETURNи ERR. Это названия сигналов?

Почему я не нахожу их в списке всех имен сигналов, приведенных ниже, даже добавляя SIGк ним префикс ?

Они относятся только к оболочкам bash, но не к ОС Linux? Являются ли они сигналами оболочки, а не сигналами ОС Linux?

$ 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    

Благодарю.

Ответы:


19

Эти имена имеют особое значение в bash, использование которых объясняется в руководстве :

Если sigspec равен 0 или EXIT, arg выполняется при выходе из оболочки. Если sigspec равен DEBUG, команда arg выполняется перед каждой простой командой, для команды, команды case, команды select, каждой арифметики для команды, и до того, как первая команда будет выполнена в функции оболочки ...

Если sigspec - ERR, команда arg выполняется всякий раз, когда конвейер (который может состоять из одной простой команды), списка или составной команды возвращает ненулевое состояние выхода при соблюдении следующих условий ...


14

Это не сигналы, но имеет смысл использовать trapмеханизм и в некоторых других ситуациях. Эти имена имеют значение только в bash.


1
EXITЛовушка определяется POSIX , хотя.
Кусалананда

@Kusalananda Я не имел в виду, что другие оболочки не поддерживали это.
Хауке Лагинг

3
@HaukeLaging Технически (и педантично) говоря, это делает предложение «Эти имена имеют значение bash только внутри » неверным.
Pharap
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.