Exit the shell if a pipeline that is not preceded by ! fails and set -e is
active. Use a separate flag to avoid adding another condition to the if-statement at the end of evaltree(). Briefly reviewed by: cracauer
This commit is contained in:
parent
0257724685
commit
ea5e582b96
@ -182,6 +182,9 @@ evalstring(char *s)
|
|||||||
void
|
void
|
||||||
evaltree(union node *n, int flags)
|
evaltree(union node *n, int flags)
|
||||||
{
|
{
|
||||||
|
int do_etest;
|
||||||
|
|
||||||
|
do_etest = 0;
|
||||||
if (n == NULL) {
|
if (n == NULL) {
|
||||||
TRACE(("evaltree(NULL) called\n"));
|
TRACE(("evaltree(NULL) called\n"));
|
||||||
exitstatus = 0;
|
exitstatus = 0;
|
||||||
@ -219,6 +222,7 @@ evaltree(union node *n, int flags)
|
|||||||
break;
|
break;
|
||||||
case NSUBSHELL:
|
case NSUBSHELL:
|
||||||
evalsubshell(n, flags);
|
evalsubshell(n, flags);
|
||||||
|
do_etest = !(flags & EV_TESTED);
|
||||||
break;
|
break;
|
||||||
case NBACKGND:
|
case NBACKGND:
|
||||||
evalsubshell(n, flags);
|
evalsubshell(n, flags);
|
||||||
@ -256,9 +260,11 @@ evaltree(union node *n, int flags)
|
|||||||
|
|
||||||
case NPIPE:
|
case NPIPE:
|
||||||
evalpipe(n);
|
evalpipe(n);
|
||||||
|
do_etest = !(flags & EV_TESTED);
|
||||||
break;
|
break;
|
||||||
case NCMD:
|
case NCMD:
|
||||||
evalcommand(n, flags, (struct backcmd *)NULL);
|
evalcommand(n, flags, (struct backcmd *)NULL);
|
||||||
|
do_etest = !(flags & EV_TESTED);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
out1fmt("Node type = %d\n", n->type);
|
out1fmt("Node type = %d\n", n->type);
|
||||||
@ -268,9 +274,7 @@ evaltree(union node *n, int flags)
|
|||||||
out:
|
out:
|
||||||
if (pendingsigs)
|
if (pendingsigs)
|
||||||
dotrap();
|
dotrap();
|
||||||
if ((flags & EV_EXIT) || (eflag && exitstatus
|
if ((flags & EV_EXIT) || (eflag && exitstatus != 0 && do_etest))
|
||||||
&& !(flags & EV_TESTED) && (n->type == NCMD ||
|
|
||||||
n->type == NSUBSHELL)))
|
|
||||||
exitshell(exitstatus);
|
exitshell(exitstatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user