trap [ arg ] [ sig ... ]
       arg  is a series of commands (usually quoted to protect it from im-
       mediate 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  sig-
       nal  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 asso-
       ciated 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  af-
       ter  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 addi-
       tional 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  option  in zshoptions(1).  Also, the shell parameter
       ZSH_DEBUG_CMD is set to the string corresponding to the command  to
       be  executed  following  the trap.  Note that this string is recon-
       structed from the internal format and may not be formatted the same
       way as the original 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
       function completes.  The value of $? at the start of  execution  is
       the  exit  status of the shell or the return status of the function
       exiting.  If sig is 0 or EXIT and the trap statement  is  not  exe-
       cuted  inside  the body of a function, then the command arg is exe-
       cuted when the shell terminates; the trap runs before  any  zshexit
       hook functions.

       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 differ-
       ent 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.
