1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-06-06 23:36:03 +02:00

27947: some cases where we should execute EXIT traps

This commit is contained in:
Peter Stephenson 2010-05-05 09:49:39 +00:00
parent b0aec8054c
commit a6ea7ab36d
3 changed files with 33 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2010-05-05 Peter Stephenson <pws@csr.com>
* 27947: Src/exec.c, Test/C03traps.ztst: fix some cases where we
should (probably) execute an EXIT trap but don't.
2010-05-02 Frank Terbeck <ft@bewatermyfriend.org>
* Simon Ruderich: 27813: Completion/Unix/Command/_git: Complete
@ -13096,5 +13101,5 @@
*****************************************************
* This is used by the shell to define $ZSH_PATCHLEVEL
* $Revision: 1.4971 $
* $Revision: 1.4972 $
*****************************************************

View File

@ -1299,6 +1299,12 @@ sublist_done:
lineno = oldlineno;
if (dont_change_job)
thisjob = cj;
if (exiting && sigtrapped[SIGEXIT]) {
dotrap(SIGEXIT);
/* Make sure this doesn't get executed again. */
sigtrapped[SIGEXIT] = 0;
}
}
/* Execute a pipeline. *
@ -1631,7 +1637,7 @@ execpline2(Estate state, wordcode pcode,
entersubsh(((how & Z_ASYNC) ? ESUB_ASYNC : 0)
| ESUB_PGRP | ESUB_KEEPTRAP);
close(synch[1]);
execcmd(state, input, pipes[1], how, 0);
execcmd(state, input, pipes[1], how, 1);
_exit(lastval);
}
} else {

View File

@ -350,6 +350,26 @@
>trap
>Working 0
{ trap 'echo This subshell is exiting' EXIT; } | cat
0: EXIT trap set in current shell at left of pipeline
>This subshell is exiting
( trap 'echo This subshell is also exiting' EXIT; ) | cat
0: EXIT trap set in subshell at left of pipeline
>This subshell is also exiting
( trap 'echo Should only appear once at the end' EXIT
( : trap reset here ) | cat
: trap not reset but not part of shell command list | cat
echo nothing after this should appear $( : trap reset here too)
)
0: EXIT trap set in subshell reset in subsubshell
>nothing after this should appear
>Should only appear once at the end
echo $( trap 'echo command substitution exited' EXIT )
0: EXIT trap set in command substitution
>command substitution exited
%clean