mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-09-28 15:01:21 +02:00
39568: "! <complex-command>" suppresses ERR_EXIT
This commit is contained in:
parent
d033f03688
commit
0854ee56bc
@ -1,5 +1,8 @@
|
||||
2016-10-05 Peter Stephenson <p.stephenson@samsung.com>
|
||||
|
||||
* 39568: Src/exec.c, Test/C03traps.ztst: "! <complex-command>"
|
||||
should suppress ERR_EXIT inside the complex command.
|
||||
|
||||
* 39566: README, Doc/Zsh/exec.yo, Src/exec.c,
|
||||
Test/C04funcdef.ztst: change the behaviour of
|
||||
command_not_found_handler to make it easier to handle a non-zero
|
||||
|
@ -1317,8 +1317,13 @@ execlist(Estate state, int dont_change_job, int exiting)
|
||||
next = state->pc + WC_SUBLIST_SKIP(code);
|
||||
if (!oldnoerrexit)
|
||||
noerrexit = !isend;
|
||||
if ((WC_SUBLIST_FLAGS(code) & WC_SUBLIST_NOT) && isend)
|
||||
this_noerrexit = 1;
|
||||
if (WC_SUBLIST_FLAGS(code) & WC_SUBLIST_NOT) {
|
||||
/* suppress errexit for "! this_command" */
|
||||
if (isend)
|
||||
this_noerrexit = 1;
|
||||
/* suppress errexit for ! <list-of-shell-commands> */
|
||||
noerrexit = 1;
|
||||
}
|
||||
switch (WC_SUBLIST_TYPE(code)) {
|
||||
case WC_SUBLIST_END:
|
||||
/* End of sublist; just execute, ignoring status. */
|
||||
|
@ -554,6 +554,33 @@ F:Must be tested with a top-level script rather than source or function
|
||||
}
|
||||
fn
|
||||
1:ERRETURN with "!" and a following false
|
||||
>before
|
||||
|
||||
fn() {
|
||||
emulate -L zsh
|
||||
setopt errreturn
|
||||
print before
|
||||
! if true; then
|
||||
false
|
||||
fi
|
||||
print after
|
||||
}
|
||||
fn
|
||||
0:ERRETURN with "!" suppressed inside complex structure
|
||||
>before
|
||||
>after
|
||||
|
||||
fn() {
|
||||
emulate -L zsh
|
||||
setopt errreturn
|
||||
print before
|
||||
if true; then
|
||||
false
|
||||
fi
|
||||
print after
|
||||
}
|
||||
fn
|
||||
1:ERRETURN with no "!" suppression (control case)
|
||||
>before
|
||||
|
||||
%clean
|
||||
|
Loading…
Reference in New Issue
Block a user