142 lines
4.7 KiB
Diff
142 lines
4.7 KiB
Diff
diff -u -r3.164 -r3.165
|
|
--- tcsh-6.17.00/sh.h 5 Feb 2011 16:14:20 -0000 3.164
|
|
+++ tcsh-6.17.00/sh.h 14 Apr 2011 18:25:25 -0000 3.165
|
|
@@ -578,6 +578,7 @@
|
|
EXTERN int editing IZERO; /* doing filename expansion and line editing */
|
|
EXTERN int noediting IZERO; /* initial $term defaulted to noedit */
|
|
EXTERN int bslash_quote IZERO;/* PWP: tcsh-style quoting? (in sh.c) */
|
|
+EXTERN int anyerror IZERO; /* propagate errors from pipelines/backq */
|
|
EXTERN int compat_expr IZERO;/* csh-style expressions? */
|
|
EXTERN int isoutatty IZERO; /* is SHOUT a tty */
|
|
EXTERN int isdiagatty IZERO;/* is SHDIAG a tty */
|
|
diff -u -r3.118 -r3.119
|
|
--- tcsh-6.17.00/sh.proc.c 24 Mar 2011 14:06:59 -0000 3.118
|
|
+++ tcsh-6.17.00/sh.proc.c 14 Apr 2011 18:25:25 -0000 3.119
|
|
@@ -557,6 +557,11 @@
|
|
reason = 0;
|
|
fp = pp;
|
|
do {
|
|
+ /* In case of pipelines only the result of the last
|
|
+ * command should be taken in account */
|
|
+ if (!anyerror && !(fp->p_flags & PBRACE)
|
|
+ && ((fp->p_flags & PPOU) || (fp->p_flags & PBACKQ)))
|
|
+ continue;
|
|
if (fp->p_reason)
|
|
reason = fp->p_flags & (PSIGNALED | PINTERRUPTED) ?
|
|
fp->p_reason | META : fp->p_reason;
|
|
@@ -734,6 +739,8 @@
|
|
pp->p_flags |= PBACKQ;
|
|
if (t->t_dflg & F_HUP)
|
|
pp->p_flags |= PHUP;
|
|
+ if (t->t_dcom && t->t_dcom[0] && (*t->t_dcom[0] == '{'))
|
|
+ pp->p_flags |= PBRACE;
|
|
if (cmdmax == 0)
|
|
morecommand(CMD_INIT);
|
|
cmdp = cmdstr;
|
|
diff -u -r3.14 -r3.15
|
|
--- tcsh-6.17.00/sh.proc.h 7 May 2010 18:16:07 -0000 3.14
|
|
+++ tcsh-6.17.00/sh.proc.h 14 Apr 2011 18:25:25 -0000 3.15
|
|
@@ -103,6 +103,7 @@
|
|
#define PNEEDNOTE (1<<15) /* notify as soon as practical */
|
|
#define PBACKQ (1<<16) /* Process is `` evaluation */
|
|
#define PHUP (1<<17) /* Process is marked for SIGHUP on exit */
|
|
+#define PBRACE (1<<18) /* Process is {} evaluation */
|
|
|
|
/* defines for arguments to pprint */
|
|
#define NUMBER 01
|
|
diff -u -r3.81 -r3.82
|
|
--- tcsh-6.17.00/sh.set.c 4 Feb 2011 18:00:26 -0000 3.81
|
|
+++ tcsh-6.17.00/sh.set.c 14 Apr 2011 18:25:25 -0000 3.82
|
|
@@ -106,6 +106,9 @@
|
|
else if (eq(vp, STRloginsh)) {
|
|
loginsh = 1;
|
|
}
|
|
+ else if (eq(vp, STRanyerror)) {
|
|
+ anyerror = 1;
|
|
+ }
|
|
else if (eq(vp, STRsymlinks)) {
|
|
Char *pn = varval(vp);
|
|
|
|
@@ -763,6 +766,8 @@
|
|
HistLit = 0;
|
|
if (adrof(STRloginsh) == 0)
|
|
loginsh = 0;
|
|
+ if (adrof(STRanyerror) == 0)
|
|
+ anyerror = 0;
|
|
if (adrof(STRwordchars) == 0)
|
|
word_chars = STR_WORD_CHARS;
|
|
if (adrof(STRedit) == 0)
|
|
diff -u -r3.97 -r3.98
|
|
--- tcsh-6.17.00/tc.const.c 27 Feb 2011 00:14:38 -0000 3.97
|
|
+++ tcsh-6.17.00/tc.const.c 14 Apr 2011 18:25:26 -0000 3.98
|
|
@@ -43,6 +43,7 @@
|
|
#endif
|
|
Char STRautomatic[] = { 'a', 'u', 't', 'o', 'm', 'a', 't', 'i', 'c',
|
|
'\0' };
|
|
+Char STRanyerror[] = { 'a', 'n', 'y', 'e', 'r', 'r', 'o', 'r', '\0' };
|
|
Char STRhangup[] = { 'h', 'a', 'n', 'g', 'u', 'p', '\0' };
|
|
Char STRaout[] = { 'a', '.', 'o', 'u', 't', '\0' };
|
|
Char STRtty[] = { 't', 't', 'y', '\0' };
|
|
diff -u -r3.226 -r3.227
|
|
--- tcsh-6.17.00/tcsh.man 1 Feb 2011 19:56:50 -0000 3.226
|
|
+++ tcsh-6.17.00/tcsh.man 14 Apr 2011 18:25:26 -0000 3.227
|
|
@@ -4352,7 +4352,12 @@
|
|
See also \fBloginsh\fR.
|
|
.TP 8
|
|
.B status
|
|
-The status returned by the last command. If it terminated
|
|
+The status returned by the last command, unless the variable
|
|
+.B anyerror
|
|
+is set, and any error in a pipeline or a backquote expansion will be
|
|
+propagated (this was the default
|
|
+.B csh
|
|
+behavior). If it terminated
|
|
abnormally, then 0200 is added to the status. Builtin commands
|
|
which fail return exit status `1', all other builtin commands
|
|
return status `0'.
|
|
diff -u -r1.6 -r1.7
|
|
--- tcsh-6.17.00/tests/lexical.at 6 May 2010 14:36:10 -0000 1.6
|
|
+++ tcsh-6.17.00/tests/lexical.at 14 Apr 2011 18:25:26 -0000 1.7
|
|
@@ -57,7 +57,7 @@
|
|
set verbose
|
|
echo `&|;<>()&||<<>>space tab end`
|
|
]])
|
|
-AT_CHECK([tcsh -f nosplit.csh], 1,
|
|
+AT_CHECK([tcsh -f nosplit.csh], 0,
|
|
[&|;<>()&||<<>>space tab end
|
|
&|;<>()&||<<>>space tab end
|
|
&|;<>()&||<<>>space tab end
|
|
@@ -132,7 +132,7 @@
|
|
AT_CHECK([tcsh -f -c 'echo "$OK"'], 1, , [OK: Undefined variable.
|
|
])
|
|
|
|
-AT_CHECK([tcsh -f -c 'echo "`OK`"'], 1, [
|
|
+AT_CHECK([tcsh -f -c 'echo "`OK`"'], 0, [
|
|
],
|
|
[OK: Command not found.
|
|
])
|
|
diff -u -r1.2 -r1.3
|
|
--- tcsh-6.17.00/tests/subst.at 16 Feb 2006 03:12:00 -0000 1.2
|
|
+++ tcsh-6.17.00/tests/subst.at 14 Apr 2011 18:25:26 -0000 1.3
|
|
@@ -14,7 +14,7 @@
|
|
echo `echo 1; \\
|
|
echo 2`
|
|
]])
|
|
-AT_CHECK([tcsh -f backq.csh], 1,
|
|
+AT_CHECK([tcsh -f backq.csh], 0,
|
|
[4
|
|
2
|
|
1 2
|
|
diff -u -r1.2 -r1.3
|
|
--- tcsh-6.17.00/tests/syntax.at 16 Feb 2006 03:12:00 -0000 1.2
|
|
+++ tcsh-6.17.00/tests/syntax.at 14 Apr 2011 18:25:26 -0000 1.3
|
|
@@ -156,7 +156,7 @@
|
|
[OK
|
|
])
|
|
|
|
-AT_CHECK([tcsh -f -c '(echo $this_does_not_exist) |& cat'], 1,
|
|
+AT_CHECK([tcsh -f -c '(echo $this_does_not_exist) |& cat'], 0,
|
|
[this_does_not_exist: Undefined variable.
|
|
])
|
|
|