next up previous contents
Next: shift Up: 內建命令 Previous: test   Contents

trap

捉到某個signal時shell做的對應,
    通式
    $ 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號)就不做任何事(冒號:)



Cyril Huang 2002-06-14