Skip to content

# 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`) 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 for the `-e` (`errexit`) option

November 7, 2024
November 7, 2024

## Comments