EXIT、DEBUG、RETURN、およびERRシグナルはありますか?


14

trapbash の組み込みの構文は次のとおりです。

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

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

...

そのうちbashのマニュアルのポイントは、sigspecすることができEXITDEBUGRETURN、と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    

ありがとう。

回答:


19

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

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

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


14

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


1
EXITトラップはかかわらず、POSIXによって指定されます。
クサラナンダ

@Kusalananda他のシェルがこれをサポートしていないという意味ではありませんでした。
ホークレイジング

3
@HaukeLaging Tecnically(および教育的)に言えば、「これらの名前には意味があるbash だけ」という文が間違っています。
ファラプ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.