trap — Intercept abnormal conditions and interrupts

Format

trap ['handler'] [event …]

Description

trap intercepts certain kinds of exception conditions. Any signal may be intercepted by specifying an event corresponding to the signal number.

With an event of ERR, trap invokes the handler after receiving any having a nonzero exit status. The exception to this is conditions in if, while, and until statements. This trap is not inherited within a function.

With a trap number of 0 or EXIT, trap invokes the handler during exit from the shell. Within a function, it is invoked during exit from the function.

Any other event corresponds to a signal number or signal name. (See kill for a table of valid signal numbers and their names.) If a signal is being ignored when you enter the shell, the shell continues to ignore it without regard to any traps.

Because system initialization sets the value of the SIGIOERR signal to ignore, this signal cannot be set by trap.

The handler argument is a command list. It is usually more than one word, and so you must quote it to appear as a single argument. It is scanned when the trap function is initially invoked. When the trap condition is raised, the shell scans the command list again and runs the commands. A missing argument or an argument of - (dash) resets the default trap condition. A null argument ('') causes the trap condition to be ignored.

If there are no arguments at all, trap prints a list of all the traps and their commands.

Usage notes

trap is a special built-in shell command.

Examples

  1. On error or exit, this example deletes a temporary file created during command execution.
    trap 'rm –f /tmp/xyz$$; exit' ERR EXIT
    When an interrupt signal is received, the example prompts whether to abort, and exits if the answer is y.
    trap 'read REPLY?"ABORT??"
            case $REPLY in
            y)      exit 1;;
            esac'   2
  2. This example saves your shell history file (specified by the value you give the HISTFILE environment variable) before timing you out, so you can restore it when you log on again.
    trap 'cp $HISTFILE $HOME/old_hist.bak; exit' ALRM

Localization

trap uses the following localization environment variables:
  • LANG
  • LC_ALL
  • LC_MESSAGES
  • NLSPATH

See Localization for more information.

Exit values

0
Successful completion
1
Failure due to any of the following:
  • Incorrect signal name
  • Incorrect signal number
2
Incorrect command-line argument

Messages

Possible error messages include:
name not a valid trap name
You specified an unrecognized trap name. The usual cause of this error is a typing mistake on the command line.

Portability

POSIX.2, X/Open Portability GuideX/Open Portability Guide.

Related information

sh