Date: Sun, 10 May 1998 10:36:37 +0100 From: Brian Somers <brian@Awfulhak.org> To: "John W. DeBoskey" <jwd@unx.sas.com> Cc: freebsd-hackers@FreeBSD.ORG Subject: Re: Unexpected behaviour from pdksh. Comments? Message-ID: <199805100936.KAA20765@awfulhak.org> In-Reply-To: Your message of "Sat, 09 May 1998 21:52:21 EDT." <199805100152.AA24180@mozart>
next in thread | previous in thread | raw e-mail | index | archive | help
The *only* shell that executes the last bit of a pipe inline is the
original ksh. Pdksh, zsh, sh, ash, bash and probably just about all
other shells create a subshell.
This is a pain -
something | read this that theother
must be changed to
read this that theother <<eof
`something`
eof
It's too late to change the other shells now though.
> Hi,
>
> The following is on 3.0-CURRENT using pdksh.
>
> Given the following sample Korn Shell script:
>
> export FOO=foo
> echo $FOO
>
> echo bar | while read var; do
> export FOO=$var
> echo $FOO
> done
>
> echo $FOO
>
> The output is:
> foo
> bar
> foo
>
> where I was expecting:
> foo
> bar
> bar
>
>
>
>
> If I put the value 'bar' in a file and change the while
> loop to:
>
> echo bar > varfile
> while read var; do
> export FOO=$var
> echo $FOO
> done < varfile
>
> I get the expected reult with the above.
>
> It seems that the pipe '|' is causing the 'while read var' to
> execute in a subshell. Does anyone know of a way to make this
> work the way I am expecting it to? fyi: this seems to work ok
> under hpux 9.05 & 10.20 and SunOS 5.6...
>
> Thanks,
> John
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-hackers" in the body of the message
--
Brian <brian@Awfulhak.org>, <brian@FreeBSD.org>, <brian@OpenBSD.org>
<http://www.Awfulhak.org>
Don't _EVER_ lose your sense of humour....
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199805100936.KAA20765>
