參考:Shell Scripting Tutorial Trap
簡介
trap是shell內置命令,它對硬件信號和其他事件做出響應。trap定義並激活信號處理過程,信號處理過程是當shell接收信號或其他特殊條件時要運行的處理過程。
語法
trap [-lp] [[ARG] SIGNAL_SPEC...]
說明
trap定義並激活信號處理過程。 ARG是當shell接收信號SIGNAL_SPEC時要讀取和執行的命令。
①如果ARG不存在(並且提供單個SIGNAL_SPEC)或ARG是破折號(“ - ”),則每個指定的信號被重置為其原始值。
trap 1 2 表示在執行腳本時,對信號 1 2采取默認動作
②如果ARG是空字符串,則shell將忽略每個SIGNAL_SPEC及其調用的命令。
trap '' 1 2 3 15 表示在執行腳本時忽略信號1 2 3 15
如果忽略一個信號,所有子shell也會忽略該信號。但是,如果您指定在接收信號時要采取的操作,則所有子殼仍將在接收到該信號時采取默認操作。
③如果SIGNAL_SPEC是EXIT(0),則在退出shell時執行ARG。
④如果SIGNAL_SPEC是DEBUG,則在每個簡單命令之前執行ARG。
⑤如果SIGNAL_SPEC是RETURN,通過.或者內置命令source執行腳本或shell函數時,ARG都會執行。
⑥如果SIGNAL_SPEC是ERR一種,當shell執行時指定-e參數(執行腳本時指定-e參數,一旦出錯就退出當前shell),每次出錯退出都會執行ARG。
選項
-l:打印信號名稱列表及其對應的數字。
root@ubuntu:~# 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
stty -a可以顯示觸發某些信號的鍵位。
root@ubuntu:~# stty -a speed 38400 baud; rows 40; columns 96; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0; -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc
-p:顯示與每個SIGNAL_SPEC相關的trap處理命令
root@ubuntu:~# trap -p trap -- '' SIGTSTP trap -- '' SIGTTIN trap -- '' SIGTTOU
trap 'rm -f /tmp/xyz$$; exit' ERR EXIT
設置一個trap,在shell錯誤 或 shell退出時刪除臨時文件xyz $$。
