# 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