From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12777 invoked by alias); 5 Oct 2016 11:37:59 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 39568 Received: (qmail 25623 invoked from network); 5 Oct 2016 11:37:59 -0000 X-Qmail-Scanner-Diagnostics: from mailout4.w1.samsung.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(210.118.77.14):SA:0(-2.6/5.0):. Processed in 0.48325 secs); 05 Oct 2016 11:37:59 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=RP_MATCHES_RCVD autolearn=unavailable autolearn_force=no version=3.4.1 X-Envelope-From: p.stephenson@samsung.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: none (ns1.primenet.com.au: domain at samsung.com does not designate permitted sender hosts) X-AuditID: cbfec7f4-f791c6d000006eac-11-57f4e60f54e9 Date: Wed, 05 Oct 2016 12:37:47 +0100 From: Peter Stephenson To: Zsh hackers list Subject: Re: 'set -e' with '!' POSIX issue Message-id: <20161005123747.3572c810@pwslap01u.europe.root.pri> In-reply-to: <4e660f18-3850-d589-8a17-e75d2c419fbe@inlv.org> Organization: Samsung Cambridge Solution Centre X-Mailer: Claws Mail 3.7.9 (GTK+ 2.22.0; i386-redhat-linux-gnu) MIME-version: 1.0 Content-type: text/plain; charset=US-ASCII Content-transfer-encoding: 7bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrLIsWRmVeSWpSXmKPExsWy7djPc7r8z76EG7z5JWdxsPkhkwOjx6qD H5gCGKO4bFJSczLLUov07RK4Mk7de8lYsFCg4vzk6ewNjNN5uhg5OSQETCQmLZ3PBGGLSVy4 t56ti5GLQ0hgKaNE/4kfzBBOL5PE7sVT2GA6Xt9fxgKRWMYosWPWFHYIZxqTxLP1/1khnNOM EkcefoRyzgA5e24zgvSzCKhKLNo2A8xmEzCUmLppNpgtIqAlsePkSbBLhIHsrYvesoDYvAL2 Eh2PfrOC2JwCNhLXbqxjB7H5BfQlrv79BHW5vcTMK2cYIeoFJX5MvgfWyyygI7Ft22N2CFte YvOat2APSQj8Z5No6joO9BAHkCMrsekAM8QcF4kNS5tZIWxhiVfHt7BD2DISlyd3s0DY/YwS T7p9IebMYJQ4fWYHNGCsJfpuX2SEWMYnMWnbdGaI+bwSHW1CECUeEkdnvWKECDtKnHvrN4FR cRaSq2chuXoWkqsXMDKvYhRJLS3OTU8tNtErTswtLs1L10vOz93ECEwEp/8d/7KDcfExq0OM AhyMSjy8HZs/hwuxJpYVV+YeYpTgYFYS4S1+8iVciDclsbIqtSg/vqg0J7X4EKM0B4uSOO+e BVfChQTSE0tSs1NTC1KLYLJMHJxSDYzt3bNX90S8LGVxawpSmLjdM43x/rr8eRt3ic6W5cp9 6MgeyTj3V8w2+/mJPxwSA5QO92h9OtgqLe0yIyzMJ1L/fLnnHbkX55dzbBIrZ+4oTX80S4TV 7sTMic+vbU1PsjdcKMmysU9GIyvrcGChDf+uFZsSVpY4Ldp37PSzP/EnDMyNjbc5uyuxFGck GmoxFxUnAgAeo7CdAAMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrGIsWRmVeSWpSXmKPExsVy+t/xa7rPnn4JN2jZz2pxsPkhkwOjx6qD H5gCGKPcbDJSE1NSixRS85LzUzLz0m2VQkPcdC2UFPISc1NtlSJ0fUOClBTKEnNKgTwjAzTg 4BzgHqykb5fglnHq3kvGgoUCFecnT2dvYJzO08XIySEhYCLx+v4yFghbTOLCvfVsXYxcHEIC Sxgl3hxvZIJwZjBJ3Fs+mx3COc0oMePJOlYI5wyjxPHJG1lB+lkEVCUWbZvBCGKzCRhKTN00 G8wWEdCS2HHyJBOILQxkb130Fmwfr4C9RMej32C9nAI2EtdurGMHsYUELjFJ3H5gBWLzC+hL XP37iQniPnuJmVfOMEL0Ckr8mHwPbA4z0MzN25pYIWx5ic1r3jJDzFGXuHF3N/sERuFZSFpm IWmZhaRlASPzKkaR1NLi3PTcYiO94sTc4tK8dL3k/NxNjMA42nbs55YdjF3vgg8xCnAwKvHw dmz+HC7EmlhWXJl7iFGCg1lJhFcNGIVCvCmJlVWpRfnxRaU5qcWHGE2BATORWUo0OR8Y43kl 8YYmhuaWhkbGFhbmRkZK4rxTP1wJFxJITyxJzU5NLUgtgulj4uCUamA89KrxwJ4Feod6Szk8 YrzKgibm3duxWLK2ftopi6mfg1ZOCrhwc+WHH31Si26sUV/VmJCpNYk/2yVt8+kS5Yp9RofS Fu/Vmqx7ckb92d51hz0WMXe8t3javFSzp2CeUOemc3E2WmunLpPJWbXt9MsJWrdO3RVY9Kyu +qI63/W7arFtYjHrd4bsUGIpzkg01GIuKk4EAPl2bvS5AgAA X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20161005113751eucas1p29d1348f2d68379470de97a7f993316c7 X-Msg-Generator: CA X-Sender-IP: 182.198.249.180 X-Local-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUb?= =?UTF-8?B?7IK87ISx7KCE7J6QG1ByaW5jaXBhbCBFbmdpbmVlciwgU29mdHdhcmU=?= X-Global-Sender: =?UTF-8?B?UGV0ZXIgU3RlcGhlbnNvbhtTQ1NDLURhdGEgUGxhbmUbU2Ft?= =?UTF-8?B?c3VuZyBFbGVjdHJvbmljcxtQcmluY2lwYWwgRW5naW5lZXIsIFNvZnR3YXJl?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDA1Q0QwNTAwNTg=?= CMS-TYPE: 201P X-HopCount: 7 X-CMS-RootMailID: 20161004075413eucas1p2cf7a0e3dded0a894b79c661f6da0b885 X-RootMTR: 20161004075413eucas1p2cf7a0e3dded0a894b79c661f6da0b885 References: <70cf25f2-f156-51c4-60b6-00def8769328@inlv.org> <20161002185530.3fa8c013@ntlworld.com> <20161004074538.GD4212@cventin.lip.ens-lyon.fr> <20161004093005.7dbc6696@pwslap01u.europe.root.pri> <4e660f18-3850-d589-8a17-e75d2c419fbe@inlv.org> On Wed, 5 Oct 2016 12:18:26 +0200 Martijn Dekker wrote: > On Fri, Mar 13, 2009 at 03:51:34PM +0100, Vincent Lefevre wrote: > > According to the new "set -e" proposal > > > > http://www.opengroup.org/austin/mailarchives/ag/msg18258.html > > > > zsh -c 'set -e; ! if true; then false; fi; echo $?' > > > > should output 0, i.e. "false" should not make the shell exit, because > > it is under a "!" context (even though "!" doesn't apply on the "false" > > command directly). This one appears to be a straightforward extension. diff --git a/Src/exec.c b/Src/exec.c index f248ca2..741c80e 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -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 ! */ + noerrexit = 1; + } switch (WC_SUBLIST_TYPE(code)) { case WC_SUBLIST_END: /* End of sublist; just execute, ignoring status. */ diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst index 3a65b28..0faec02 100644 --- a/Test/C03traps.ztst +++ b/Test/C03traps.ztst @@ -556,6 +556,33 @@ F:Must be tested with a top-level script rather than source or function 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 rm -f TRAPEXIT