2023-07-05 10:53:12 +02:00
# The trap builtin command
## Synopsis
trap [-lp] [[ARGUMENT] SIGNAL]
## Description
2024-10-08 06:00:17 +02:00
The `trap` command is used to "trap" signals and other events. In this
context, "trapping" means to install handler code.
2023-07-05 10:53:12 +02:00
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
2024-10-08 06:00:17 +02:00
|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|
2023-07-05 10:53:12 +02:00
### Options
2024-10-08 06:00:17 +02:00
|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|
2023-07-05 10:53:12 +02:00
### Return status
2024-10-08 06:00:17 +02:00
|Status|Reason|
|------|------|
|0|no error/success|
|!=0|invalid option|
|!=0|invalid signal specification|
2023-07-05 10:53:12 +02:00
## 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
2024-01-29 02:07:56 +01:00
- [the set command ](../../commands/builtin/set.md ) for the `-e` (`errexit`)
2023-07-05 10:53:12 +02:00
option