# The trap builtin command ## Synopsis trap [-lp] [[ARGUMENT] SIGNAL] ## Description The `trap` command is used to "trap" signals and other events. In this context, "trapping" means to install handler code. The shell code `ARGUMENT` is to be read and executed whenever the shell receives a signal or another event `SIGNAL`. The given `SIGNAL` specification can be - the name of a signal with the SIG prefix, e.g. `SIGTERM` - the name of a signal without the SIG prefix, e.g. `TERM` - the number of a signal (see `trap -l`), e.g. `15` - the name or number of a special event (see table below), e.g. `EXIT` Without any options or operands, `trap` prints a list of installed traps in a reusable format (equivalent to the `-p` option). Special `ARGUMENT`s - if `ARGUMENT` is absent or `-` (dash), the signal/event handler is reset to its original value - if `ARGUMENT` is the null string, the signal/event is ignored Special events |Name|Code|Description| |----|----|-----------| |`EXIT`|0|executed on shell exit| |`DEBUG`||executed before every simple command| |`RETURN`||executed when a shell function or a sourced code finishes executing| |`ERR`||executed each time a command's failure would cause the shell to exit when the [`-e` option (`errexit`)](../../commands/builtin/set.md) is enabled| ### Options |Option|Description| |------|-----------| |`-l`|print a list of signal names and their corresponding numbers| |`-p`|display the trap commands associated with each signal specification in a reusable format| ### Return status |Status|Reason| |------|------| |0|no error/success| |!=0|invalid option| |!=0|invalid signal specification| ## Examples ### List installed traps trap ### Ignore terminal interrupt (Ctrl-C, SIGINT) trap '' INT ## Portability considerations - `trap` is specified by POSIX(R) without the `-l` and `-p` options - in POSIX(R), beside signals, only `EXIT` (0) is valid as an event ## See also - [the set command](../../commands/builtin/set.md) for the `-e` (`errexit`) option