Linux命令——trap
阅读原文时间:2023年07月16日阅读:3

简介

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
) SIGHUP ) SIGINT ) SIGQUIT ) SIGILL ) SIGTRAP
) SIGABRT ) SIGBUS ) SIGFPE ) SIGKILL ) SIGUSR1
) SIGSEGV ) SIGUSR2 ) SIGPIPE ) SIGALRM ) SIGTERM
) SIGSTKFLT ) SIGCHLD ) SIGCONT ) SIGSTOP ) SIGTSTP
) SIGTTIN ) SIGTTOU ) SIGURG ) SIGXCPU ) SIGXFSZ
) SIGVTALRM ) SIGPROF ) SIGWINCH ) SIGIO ) SIGPWR
) SIGSYS ) SIGRTMIN ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMIN+
) SIGRTMIN+ ) SIGRTMIN+ ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX- ) SIGRTMAX-
) SIGRTMAX- ) SIGRTMAX

trp -l

stty -a可以显示触发某些信号的键位。

root@ubuntu:~# stty -a
speed baud; rows ; columns ; line = ;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ;
swtch = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
discard = ^O; min = ; time = ;
-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 $$。