From 640c6c8f64bc06d838e7419f1401501149088634 Mon Sep 17 00:00:00 2001 From: cracauer Date: Wed, 28 Jan 2004 18:22:19 +0000 Subject: [PATCH] The PR diff I committed recently had one bug noticed by Joe Marcus Clarke , subshells could lose a non-zero exit status. This commit is Joe's proposed patch. Thanks! I verified that the problem Joe found is fixed and I ran a full world with this patch. I don't plan to ever commit language patches to /bin/sh again. It is a minefield too big to navigate without a full-time committment, which I am not willing to do on our /bin/sh. Under normal circumstances I would recommend using NetBSD's sh which has a lot of language fixes (like the ones what these patches were about) but unfortunately they had implemented broken signal behaviour for shellscript containing interactive programs. Similar issues apply to pdksh which is OpenBSD's sh. From my perspective bash2 is the only really working bourne sh out there and that one is GPLed. Oh well. --- bin/sh/eval.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/sh/eval.c b/bin/sh/eval.c index 38282d42c605..b8c05896f970 100644 --- a/bin/sh/eval.c +++ b/bin/sh/eval.c @@ -273,7 +273,8 @@ evaltree(union node *n, int flags) if (pendingsigs) dotrap(); if ((flags & EV_EXIT) || (eflag && exitstatus - && !(flags & EV_TESTED) && (n->type == NCMD))) + && !(flags & EV_TESTED) && (n->type == NCMD || + n->type == NSUBSHELL))) exitshell(exitstatus); }