通式
$ trap "command" signo
其中signo是
cyril@grill:~$ kill -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 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
例如
$ trap "" 2
$ trap "rm $TMPFILE" EXIT 1 2 15
如果""的command則表示shell不處理這個signal,
2號就是INT通常就是按了Ctrl-C打斷shell script的執行,15就是
TERM(process被kill了),再看難一點的例子
trap_init()
{
trap ' scriptcleanup
[ "$SCRIPT_DISP" = ABORT ] && exit 100
[ "$SCRIPT_DISP" = PASSED ]; exit $?' EXIT
if [ -z "$__TC_INTERACTIVE" ]
then
for sig in HUP INT TERM; do
trap " trap - HUP INT TERM;
echo 'Signaled - cleanup after script ...' >&2;
scriptcleanup $sig; kill -$sig $$; exit 101" $sig
done
fi
trap : PIPE
}
這個例子的前面如果抓到EXIT這個signal就執行scriptclean到exit $?的code,
就是單quote內的東西,
如果$__TC_INTERACTIVE不是空字串,就執行下面的signal處理,
最後如果是SIGPIPE(13號)就不做任何事(冒號:)