From owner-freebsd-bugs Tue Aug 24 10:35:18 1999 Delivered-To: freebsd-bugs@freebsd.org Received: from zabagek.ihf.rwth-aachen.de (zabagek.ihf.RWTH-Aachen.DE [134.130.90.60]) by hub.freebsd.org (Postfix) with ESMTP id 9CA1515810 for ; Tue, 24 Aug 1999 10:34:49 -0700 (PDT) (envelope-from tg@zabagek.ihf.rwth-aachen.de) Received: (from tg@localhost) by zabagek.ihf.rwth-aachen.de (8.9.3/8.9.3) id QAA16393; Tue, 24 Aug 1999 16:33:34 +0200 (CEST) (envelope-from tg) To: chris@calldei.com Cc: Sheldon Hearn , Chris Piazza , freebsd-bugs@FreeBSD.ORG Subject: Re: bin/13274: /bin/sh 'read' command does not work correctly References: <67252.935481572@axl.noc.iafrica.com> <19990824092120.H90868@holly.dyndns.org> From: Thomas Gellekum In-Reply-To: Chris Costello's message of "Tue, 24 Aug 1999 09:21:21 -0500" Date: 24 Aug 1999 16:33:34 +0200 Message-ID: Lines: 117 User-Agent: Gnus/5.070095 (Pterodactyl Gnus v0.95) XEmacs/20.4 (Emerald) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.org Chris Costello writes: > On Tue, Aug 24, 1999, Thomas Gellekum wrote: > > No. This should be flagged in the manpage, IMHO. > > Please leave -e in read and do nothing in the getopt switch > for 'e'. See below. tg Index: miscbltin.c =================================================================== RCS file: /home/ncvs/src/bin/sh/miscbltin.c,v retrieving revision 1.18.2.1 diff -u -r1.18.2.1 miscbltin.c --- miscbltin.c 1999/05/08 10:43:02 1.18.2.1 +++ miscbltin.c 1999/08/24 08:37:14 @@ -71,8 +71,8 @@ /* - * The read builtin. The -e option causes backslashes to escape the - * following character. + * The read builtin. The -r option causes backslashes to be treated like + * ordinary characters. * * This uses unbuffered input, which may be avoidable in some cases. */ @@ -85,7 +85,7 @@ char **ap; int backslash; char c; - int eflag; + char rflag; char *prompt; char *ifs; char *p; @@ -98,18 +98,20 @@ struct termios told, tnew; int tsaved; - eflag = 0; + rflag = 0; prompt = NULL; tv.tv_sec = -1; tv.tv_usec = 0; - while ((i = nextopt("ep:t:")) != '\0') { + while ((i = nextopt("erp:t:")) != '\0') { switch(i) { case 'p': prompt = optarg; break; case 'e': - eflag = 1; break; + case 'r': + rflag = 1; + break; case 't': tv.tv_sec = strtol(optarg, &tvptr, 0); if (tvptr == optarg) @@ -184,7 +186,7 @@ STPUTC(c, p); continue; } - if (eflag && c == '\\') { + if (!rflag && c == '\\') { backslash++; continue; } Index: sh.1 =================================================================== RCS file: /home/ncvs/src/bin/sh/sh.1,v retrieving revision 1.23.2.2 diff -u -r1.23.2.2 sh.1 --- sh.1 1999/04/19 18:54:06 1.23.2.2 +++ sh.1 1999/08/24 08:37:29 @@ -1150,7 +1150,7 @@ it faster. However, if the current directory is renamed, the builtin version of pwd will continue to print the old name for the directory. -.It Li "read [ -p prompt ] [ -t timeout ] [ -e ] variable ... +.It Li "read [ -p prompt ] [ -t timeout ] [ -e ] [ -r] variable ... The prompt is printed if the -p option is specified and the standard input is a terminal. Then a line is read from the standard input. The trailing newline @@ -1161,7 +1161,9 @@ pieces (along with the characters in IFS that separated them) are assigned to the last variable. If there are more variables than pieces, the remaining -variables are assigned the null string. +variables are assigned the null string. A backslash at the +end of a line will be deleted from the input together with the +newline character. .Pp If the -t option is specified the timeout elapses before any input is supplied, the read command will @@ -1170,13 +1172,10 @@ explicitly specify seconds, minutes or or hours. If none is supplied, 's' is assumed. .Pp -The -e option causes any backslashes in the input to -be treated specially. If a backslash is followed by -a newline, the backslash and the newline will be -deleted. If a backslash is followed by any other -character, the backslash will be deleted and the following -character will be treated as though it were -not in IFS, even if it is. +The -e option is deprecated and only here for backward compatibility. +.Pp +The -r option causes backslashes in the input to be treated +like ordinary characters. .It readonly name ... The specified names are marked as read only, so that they cannot be subsequently modified or unset. The shell To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message