web-dev-qa-db-ja.com

EXIT、DEBUG、RETURN、およびERRシグナルですか?

Bashに組み込まれているtrapの構文は次のとおりです。

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

...各sigspecは、シグナル名またはシグナル番号です。信号名では大文字と小文字が区別されず、SIGプレフィックスはオプションです。

...

Bashのマニュアルでは、sigspecEXITDEBUGRETURN、およびERRである可能性があると指摘されています。それらは信号の名前ですか?

プレフィックスSIGを追加しても、以下に示すすべての信号名のリストでそれらが見つからないのはなぜですか?

それらはbashシェルにのみ関連していて、Linux OSには関連していませんか?それらはシェルシグナルをbashしますが、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    

ありがとう。

16
Tim

これらの名前は、使用法が マニュアル で説明されているbashで特別な意味を持っています。

Sigspecが0またはEXITの場合、シェルの終了時にargが実行されます。 sigspecがDEBUGの場合、コマンドargは、すべての単純なコマンド、コマンド、ケースコマンド、選択コマンド、コマンドのすべての算術演算の前、およびシェル関数で最初のコマンドが実行される前に実行されます...

SigspecがERRの場合、次の条件に従って、パイプライン(単一の単純なコマンドで構成される場合があります)、リスト、または複合コマンドがゼロ以外の終了ステータスを返すと、コマンドargが実行されます...

20
sebasth

これらはシグナルではありませんが、他の特定の状況でもtrapメカニズムを使用することは理にかなっています。これらの名前は、bash内でのみ意味があります。

15
Hauke Laging