trap [ arg ] [ sig ... ]
       arg is a series of commands (usually quoted to protect it from imme-
       diate evaluation by the shell) to be  read  and  executed  when  the
       shell receives any of the signals specified by one or more sig args.
       Each sig can be given as a number, or as the name of a signal either
       with or without the string SIG in front (e.g. 1, HUP, and SIGHUP are
       all the same signal).

       If  arg  is  `-',  then the specified signals are reset to their de-
       faults, or, if no sig args are present, all traps are reset.

       If arg is an empty string, then the specified signals are ignored by
       the shell (and by the commands it invokes).

       If arg is omitted but one or more sig args are provided  (i.e.   the
       first  argument is a valid signal number or name), the effect is the
       same as if arg had been specified as `-'.

       The trap command with no arguments prints a list of commands associ-
       ated with each signal.

       If sig is ZERR then arg will be executed after each command  with  a
       nonzero  exit status.  ERR is an alias for ZERR on systems that have
       no SIGERR signal (this is the usual case).

       If sig is DEBUG then arg will be executed before each command if the
       option DEBUG_BEFORE_CMD is set (as it is  by  default),  else  after
       each command.  Here, a `command' is what is described as a `sublist'
       in the shell grammar, see the section SIMPLE COMMANDS & PIPELINES in
       zshmisc(1).   If DEBUG_BEFORE_CMD is set various additional features
       are available.  First, it is possible to skip the  next  command  by
       setting the option ERR_EXIT; see the description of the ERR_EXIT op-
       tion  in  zshoptions(1).  Also, the shell parameter ZSH_DEBUG_CMD is
       set to the string corresponding to the command to be  executed  fol-
       lowing  the  trap.   Note that this string is reconstructed from the
       internal format and may not be formatted the same way as the  origi-
       nal text.  The parameter is unset after the trap is executed.

       If  sig  is  0 or EXIT and the trap statement is executed inside the
       body of a function, then the command arg is executed after the func-
       tion completes.  The value of $? at the start of  execution  is  the
       exit  status of the shell or the return status of the function exit-
       ing.  If sig is 0 or EXIT and the trap statement is not executed in-
       side the body of a function, then the command arg is  executed  when
       the  shell  terminates;  the trap runs before any zshexit hook func-
       tions.

       ZERR, DEBUG, and EXIT traps are not  executed  inside  other  traps.
       ZERR  and  DEBUG  traps are kept within subshells, while other traps
       are reset.

       Note that traps defined with the trap builtin are slightly different
       from those defined as `TRAPNAL () { ... }', as the latter have their
       own function environment (line numbers, local variables, etc.) while
       the former use the environment of the command  in  which  they  were
       called.  For example,

              trap 'print $LINENO' DEBUG

       will  print  the line number of a command executed after it has run,
       while

              TRAPDEBUG() { print $LINENO; }

       will always print the number zero.

       Alternative signal names are allowed as described under kill  above.
       Defining  a trap under either name causes any trap under an alterna-
       tive name to be removed.  However, it is recommended that  for  con-
       sistency users stick exclusively to one name or another.
