register int sig;
int old_exit_value, x;
WORD_LIST *save_subst_varlist;
+ HASH_TABLE *save_tempenv;
sh_parser_state_t pstate;
#if defined (ARRAY_VARS)
ARRAY *ps;
save_parser_state (&pstate);
save_subst_varlist = subst_assign_varlist;
subst_assign_varlist = 0;
+ save_tempenv = temporary_env;
+ temporary_env = 0; /* traps should not run with temporary env */
#if defined (JOB_CONTROL)
save_pipeline (1); /* XXX only provides one save level */
subst_assign_varlist = save_subst_varlist;
restore_parser_state (&pstate);
+ temporary_env = save_tempenv;
}
pending_traps[sig] = 0; /* XXX - move before evalstring? */
int flags;
procenv_t save_return_catch;
WORD_LIST *save_subst_varlist;
+ HASH_TABLE *save_tempenv;
sh_parser_state_t pstate;
#if defined (ARRAY_VARS)
ARRAY *ps;
save_parser_state (&pstate);
save_subst_varlist = subst_assign_varlist;
subst_assign_varlist = 0;
+ save_tempenv = temporary_env;
+ temporary_env = 0; /* traps should not run with temporary env */
#if defined (JOB_CONTROL)
if (sig != DEBUG_TRAP) /* run_debug_trap does this */
restore_pipestatus_array (ps);
#endif
+ temporary_env = save_tempenv;
+
sigmodes[sig] &= ~SIG_INPROGRESS;
running_trap = 0;
interrupt_state = old_int;