home *** CD-ROM | disk | FTP | other *** search
- Xref: sparky comp.bugs.4bsd:244 comp.unix.bsd:11662
- Newsgroups: comp.bugs.4bsd,comp.unix.bsd
- Path: sparky!uunet!spool.mu.edu!yale.edu!ira.uka.de!smurf.sub.org!flatlin!bad
- From: bad@flatlin.ka.sub.org (Christoph Badura)
- Subject: fix for ash's (/bin/sh) for loop parsing (NET2/386BSD)
- Organization: Guru Systems/Funware Department
- Date: Thu, 21 Jan 1993 16:55:14 GMT
- Message-ID: <C17r03.8up@flatlin.ka.sub.org>
- Summary: "for variable do" was rejected by parser
- Lines: 125
-
- Subject: sh(1) bombs on "for var do ..."
- Index: bin/sh/parser.c, bin/sh/sh.1
-
- Description:
- When using the
- for var do
- ...
- done
- variant of the for statement the shell complains about a
- syntax error.
- Repeat-By:
- /bin/sh
- $ for foo do
- Syntax error: word unexpected
- $ ^D
- Fix:
-
- *** parser.c,1 Tue Apr 16 02:23:22 1991
- --- parser.c Thu Jan 21 00:47:55 1993
- ***************
- *** 326,331 ****
- --- 326,333 ----
- }
- *app = NULL;
- n1->nfor.args = ap;
- + if (lasttoken != TNL && lasttoken != TSEMI)
- + synexpect(-1);
- } else {
- #ifndef GDB_HACK
- static const char argvars[5] = {CTLVAR, VSNORMAL|VSQUOTE,
- ***************
- *** 337,345 ****
- n2->narg.backquote = NULL;
- n2->narg.next = NULL;
- n1->nfor.args = n2;
- }
- - if (lasttoken != TNL && lasttoken != TSEMI)
- - synexpect(-1);
- checkkwd = 2;
- if ((t = readtoken()) == TDO)
- t = TDONE;
- --- 339,346 ----
- n2->narg.backquote = NULL;
- n2->narg.next = NULL;
- n1->nfor.args = n2;
- + tokpushback++;
- }
- checkkwd = 2;
- if ((t = readtoken()) == TDO)
- t = TDONE;
-
- And this is for the man page.
-
- *** sh.1,1 Tue Apr 16 02:23:25 1991
- --- sh.1 Thu Jan 21 00:51:54 1993
- ***************
- *** 223,234 ****
- .I for
- command looks like
- .d
- ! \fBfor\fR variable \fBin\fR word...
- \fBdo\fR list
- \fBdone\fR
- .e
- The words are expanded, and then the list is executed repeatedly with
- ! the variable set to each word in turn.
- .B do
- and
- .B done
- --- 223,236 ----
- .I for
- command looks like
- .d
- ! \fBfor\fR variable [\fBin\fR word... ]
- \fBdo\fR list
- \fBdone\fR
- .e
- The words are expanded, and then the list is executed repeatedly with
- ! the variable set to each word in turn. If \fBin\fR word ... is omitted
- ! .B in
- ! \&"$@" is assumed.
- .B do
- and
- .B done
- ***************
- *** 254,260 ****
- loops.
- .I Continue
- continues with the next iteration of the
- ! .IRnum'th
- innermost loop.
- These are implemented as builtin commands.
- .PP
- --- 256,262 ----
- loops.
- .I Continue
- continues with the next iteration of the
- ! .IR num'th
- innermost loop.
- These are implemented as builtin commands.
- .PP
- ***************
- *** 625,631 ****
- none of them has met with universal approval. The convention used by
- \fIash\fR and all the programs included in the \fIash\fR distribution is
- as follows:
- ! .ta 1i,2i
- .nf
- 0 Success.
- 1 Alternate success.
- --- 627,633 ----
- none of them has met with universal approval. The convention used by
- \fIash\fR and all the programs included in the \fIash\fR distribution is
- as follows:
- ! .ta 1i 2i
- .nf
- 0 Success.
- 1 Alternate success.
-
-
- --
- Christoph Badura --- bad@flatlin.ka.sub.org
-
- Personally, I don't care whether someone is cool enough to quote Doug
- Gwyn--I only care whether Doug Gwyn is cool enough to quote. -- Larry Wall
-