Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm
Precedence: bulk
X-No-Archive: yes
List-Id: Zsh Workers List <zsh-workers.zsh.org>
List-Post: <mailto:zsh-workers@zsh.org>
List-Help: <mailto:zsh-workers-help@zsh.org>
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 <p.stephenson@samsung.com>
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=
X-Seq: zsh-workers 37722

On Thu, 21 Jan 2016 14:06:38 +0100
Martijn Dekker <martijn@inlv.org> 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() {

