[buug] loops and pipe sinks are subshells, aaaargh
Ian Zimmerman
itz at buug.org
Thu Aug 4 14:07:14 PDT 2011
> [34]matica:~$ echo bar > baz
> [35]matica:~$ foo=1
> [36]matica:~$ cat baz | while read line ; do foo=$line ; done
> [37]matica:~$ echo $foo
> 1
Tony> Well, a pipe does need two processes so you can have concurrent
Tony> execution, otherwise you'd have a MSDOS-style pipe
But bash creates 3 processes in this case. There is a subshell where
the while .. done executes. And I'm sure this is mandated by POSIX.
Anyway, as I wrote I'm just interested in solutions :-P Right now I use
temporary files which is ugly as sin.
--
Ian Zimmerman
gpg public key: 1024D/C6FF61AD
fingerprint: 66DC D68F 5C1B 4D71 2EE5 BD03 8A00 786C C6FF 61AD
Rule 420: All persons more than eight miles high to leave the court.
More information about the buug
mailing list