From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11068 invoked by alias); 21 Jan 2016 16:21:05 -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: 37722 Received: (qmail 4063 invoked from network); 21 Jan 2016 16:21:02 -0000 X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.0 X-AuditID: cbfec7f4-f79026d00000418a-f3-56a1056af41f Date: Thu, 21 Jan 2016 16:20:54 +0000 From: Peter Stephenson To: zsh-workers@zsh.org Subject: Re: [BUG] 'test' returns 1 (not >1) on error [was: test is not posix] Message-id: <20160121162054.62baed03@pwslap01u.europe.root.pri> In-reply-to: <56A0D7DE.5000407@inlv.org> References: <20160120220614.18fe6683@enterprise> <56A01C67.1050509@inlv.org> <20160121124113.12e2d72a@pwslap01u.europe.root.pri> <56A0D7DE.5000407@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+NgFrrALMWRmVeSWpSXmKPExsVy+t/xq7pZrAvDDG6dFLI42PyQyYHRY9XB D0wBjFFcNimpOZllqUX6dglcGdsPqxScEarYMesZUwPjWr4uRk4OCQETiT/vbrJC2GISF+6t Z+ti5OIQEljKKPHqQD8LSEJIYAaTxPqP6hCJc4wSTY/3MkM4Zxklzm4/ywRSxSKgKrH03xxG EJtNwFBi6qbZYLaIgLjE2bXnwSYJC/hJnN93FizOK2AvcXb3E3YQm1NAQ+Lw1CusEEPnMUpc +vEIrIhfQF/i6t9PTBD32UvMvHIGqllQ4sfke2BDmQW0JDZva2KFsOUlNq95ywxxtrrEjbu7 2ScwCs9C0jILScssJC0LGJlXMYqmliYXFCel5xrqFSfmFpfmpesl5+duYoSE85cdjIuPWR1i FOBgVOLhvXFtfpgQa2JZcWXuIUYJDmYlEd5cxoVhQrwpiZVVqUX58UWlOanFhxilOViUxHnn 7nofIiSQnliSmp2aWpBaBJNl4uCUamDs+mgSdCHIPIDrfn/AfwnL0Ihfz+/tmetw8iJfqNDs WuO8xy+5Npu8DD53cB8f45WD1/2n7J7Mu+KwlW7KnB93/vzatrzqb8BmmQg700kxbXGfxffe m+rk+VzualdGlPCk2Tq6SXv0v92Qr1zPw3RcNu1wHE/5hNwo0y8b5newJE+pKD645iy3Ektx RqKhFnNRcSIAPzQeEmMCAAA= On Thu, 21 Jan 2016 14:06:38 +0100 Martijn Dekker wrote: > Something I also noticed back in May, and which I'm now reminded of, is > that test/[ returns status 1, and not 2 or higher, if an error occurs. It's correct inside the condition code, so this is yet another thing the test builtin needs fixing up for. diff --git a/Src/builtin.c b/Src/builtin.c index dd20f9e..98ecb09 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -6531,7 +6531,7 @@ bin_test(char *name, char **argv, UNUSED(Options ops), int func) for (s = argv; *s; s++); if (s == argv || strcmp(s[-1], "]")) { zwarnnam(name, "']' expected"); - return 1; + return 2; } s[-1] = NULL; } @@ -6574,19 +6574,19 @@ bin_test(char *name, char **argv, UNUSED(Options ops), int func) if (errflag) { errflag &= ~ERRFLAG_ERROR; zcontext_restore(); - return 1; + return 2; } if (!prog || tok == LEXERR) { zwarnnam(name, tokstr ? "parse error" : "argument expected"); zcontext_restore(); - return 1; + return 2; } zcontext_restore(); if (*curtestarg) { zwarnnam(name, "too many arguments"); - return 1; + return 2; } /* syntax is OK, so evaluate */ diff --git a/Test/C02cond.ztst b/Test/C02cond.ztst index 0b4608a..88cad0d 100644 --- a/Test/C02cond.ztst +++ b/Test/C02cond.ztst @@ -223,27 +223,27 @@ F:Failures in these cases do not indicate a problem in the shell. 0:substitution in `[' builtin [ -n foo scrimble ] -1:argument checking for [ builtin +2:argument checking for [ builtin ?(eval):[:1: too many arguments test -n foo scramble -1:argument checking for test builtin +2:argument checking for test builtin ?(eval):test:1: too many arguments [ -n foo scrimble scromble ] -1:argument checking for [ builtin +2:argument checking for [ builtin ?(eval):[:1: too many arguments test -n foo scramble scrumble -1:argument checking for test builtin +2:argument checking for test builtin ?(eval):test:1: too many arguments [ -n foo -a -n bar scrimble ] -1:argument checking for [ builtin +2:argument checking for [ builtin ?(eval):[:1: too many arguments test -n foo -a -z "" scramble -1:argument checking for test builtin +2:argument checking for test builtin ?(eval):test:1: too many arguments fn() {