From owner-freebsd-questions@FreeBSD.ORG Wed Dec 10 21:27:42 2008 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0EA19106567A; Wed, 10 Dec 2008 21:27:42 +0000 (UTC) (envelope-from keramida@freebsd.org) Received: from igloo.linux.gr (igloo.linux.gr [62.1.205.36]) by mx1.freebsd.org (Postfix) with ESMTP id 91DCA8FC25; Wed, 10 Dec 2008 21:27:41 +0000 (UTC) (envelope-from keramida@freebsd.org) Received: from kobe.laptop (adsl22-219.kln.forthnet.gr [77.49.149.219]) (authenticated bits=128) by igloo.linux.gr (8.14.3/8.14.3/Debian-5) with ESMTP id mBALRWAt004298 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT); Wed, 10 Dec 2008 23:27:38 +0200 Received: from kobe.laptop (kobe.laptop [127.0.0.1]) by kobe.laptop (8.14.3/8.14.3) with ESMTP id mBALRWqG006915; Wed, 10 Dec 2008 23:27:32 +0200 (EET) (envelope-from keramida@freebsd.org) Received: (from keramida@localhost) by kobe.laptop (8.14.3/8.14.3/Submit) id mBALRVKI006914; Wed, 10 Dec 2008 23:27:31 +0200 (EET) (envelope-from keramida@freebsd.org) From: Giorgos Keramidas To: "Michael Proto" References: <1de79840812092149t4d212027o2c908635419fa838@mail.gmail.com> Date: Wed, 10 Dec 2008 23:27:31 +0200 In-Reply-To: <1de79840812092149t4d212027o2c908635419fa838@mail.gmail.com> (Michael Proto's message of "Wed, 10 Dec 2008 00:49:58 -0500") Message-ID: <87zlj390vw.fsf@kobe.laptop> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.60 (berkeley-unix) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-MailScanner-ID: mBALRWAt004298 X-Hellug-MailScanner: Found to be clean X-Hellug-MailScanner-SpamCheck: not spam, SpamAssassin (not cached, score=-4.301, required 5, autolearn=not spam, ALL_TRUSTED -1.80, AWL 0.10, BAYES_00 -2.60) X-Hellug-MailScanner-From: keramida@freebsd.org X-Spam-Status: No Cc: FreeBSD Current , freebsd-questions@freebsd.org Subject: Re: behavioral change of "read" builtin for sh on 8-CURRENT X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Dec 2008 21:27:42 -0000 Hi Michael, This looks like a bug in 8.0-CURRENT. Can you please file a bug report and include the text you sent below? On Wed, 10 Dec 2008 00:49:58 -0500, "Michael Proto" wrote: > I've noticed a behavioral difference of the "read" builtin statement within > /bin/sh on CURRENT and I'm hoping someone can point me in the right > direction on how to restore the old behavior. > > I have a /bin/sh script that accepts input for IP address information: > > #!/bin/sh > set -x > DEFINT=vr0 > DEFIP=192.168.0.1 > DEFMASK=255.255.255.0 > read -p "Enter network interface [$DEFINT]: " -t 5 INT > read -p "Enter IP address [$DEFIP]: " -t 5 IP > read -p "Enter netmask [$DEFMASK]: " -t 5 MASK > echo ${INT:=$DEFINT} : ${IP:=$DEFIP}/${MASK:=$DEFMASK} > > This script waits for terminal input for each of the above variables (INT, > IP, MASK) and defaults to a script-provided value if no input is entered in > 5 seconds for each variable. On 6.x and 7.x if I simply hit Enter at the > prompt (and don't provide any input) no value is assigned to the variable so > my INT, IP, and MASK variables are set to null and the parameter > substitution of the DEF* variables works as expected. > > On 8-CURRENT if I hit Enter with no input at the prompt the system seems to > recognize the newline as input and continues to sit there until I hit Enter > again. When I do this there appears to be a strange unprintable value > assigned to the INT, IP, and MASK variables yet the variable subsitution > doesn't work correctly. > > The man page on sh lists the following behavior for read: > > read [-p prompt] [-t timeout] [-er] variable ... > The prompt is printed if the -p option is specified and the > stan- > dard input is a terminal. Then a line is read from the > standard > input. The trailing newline is deleted from the line and the > line is split as described in the section on White Space > Splitting (Field Splitting) above, and the pieces are assigned > to > the variables in order. If there are more pieces than > variables, > the remaining pieces (along with the characters in IFS that > sepa- > rated them) are assigned to the last variable. If there are > more > variables than pieces, the remaining variables are assigned the > null string. > > > As I interpret this, read should delete the trailing newline and assign a > null value since there is is no "input" before the newline. Then the > variable substitution should take over and assign the DEF* variables > appropriately. 6 and 7 follow this but 8 does not. > > Here's the output of the script (with set -x) to help show what I'm seeing. > > This is on 6 and 7: > > + DEFINT=vr0 > + DEFIP=192.168.0.1 > + DEFMASK=255.255.255.0 > + read -p Enter network interface [vr0]: -t 5 INT > Enter network interface [vr0]: > + read -p Enter IP address [192.168.0.1]: -t 5 IP > Enter IP address [192.168.0.1]: > + read -p Enter netmask [255.255.255.0]: -t 5 MASK > Enter netmask [255.255.255.0]: > + echo vr0 : 192.168.0.1/255.255.255.0 > vr0 : 192.168.0.1/255.255.255.0 > > > And this is what I see with 8: > > + DEFINT=vr0 > + DEFIP=192.168.0.1 > + DEFMASK=255.255.255.0 > + read -p Enter network interface [vr0]: -t 5 INT > Enter network interface [vr0]: > + read -p Enter IP address [192.168.0.1]: -t 5 IP > Enter IP address [192.168.0.1]: > + read -p Enter netmask [255.255.255.0]: -t 5 MASK > Enter netmask [255.255.255.0]: > /: cho > /: > > Strange that the "echo" statement is missing the first "e" character in the > debug output. > > Even stranger on 8-CURRENT, if I *do* enter input before the newline (say I > change the IP address or the network interface), the first character is not > echoed back to the screen but is still saved to the variable. Here's an > example when I run the script and provide input at each prompt: > > + DEFINT=vr0 > + DEFIP=192.168.0.1 > + DEFMASK=255.255.255.0 > + read -p Enter network interface [vr0]: -t 5 INT > Enter network interface [vr0]: r0 > + read -p Enter IP address [192.168.0.1]: -t 5 IP > Enter IP address [192.168.0.1]: 92.168.0.1 > + read -p Enter netmask [255.255.255.0]: -t 5 MASK > Enter netmask [255.255.255.0]: 55.255.255.0 > + echo br0 : 192.168.0.1/255.255.255.0 > br0 : 192.168.0.1/255.255.255.0 > + echo ifconfig br0 inet 192.168.0.1 netmask 255.255.255.0 > > Notice that when I'm prompted, the first character doesn't echo but is still > saved in the variable. > > > Does anyone else see this same behavior? Any ideas on how to reset it back > to how it works in STABLE? I'm not doing anything special with IFS so I'm > stumped on how to troubleshoot this. > > > > Thanks, > Proto > _______________________________________________ > freebsd-questions@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-questions > To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org" > --