Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: exit value of intermediate program in pipe
- X-seq: zsh-users 1504
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxx>
- To: Sweth Chandramouli <sweth@xxxxxxxxxxxxxxxxxxxx>, zsh-users@xxxxxxxxxxxxxxx
- Subject: Re: exit value of intermediate program in pipe
- Date: Sun, 3 May 1998 18:35:49 -0700
- In-reply-to: <19980503181509.09250@xxxxxxxxxxxxxxxxxxxx>
- References: <199805022224.QAA03113@xxxxxxxxxxxxxxxxxxxxxx> <980502190831.ZM29269@xxxxxxxxxxxxxxxxxxxxxxx> <19980503021749.21621@xxxxxxxxxxxxxxxxxxxx> <980503023014.ZM31001@xxxxxxxxxxxxxxxxxxxxxxx> <19980503181509.09250@xxxxxxxxxxxxxxxxxxxx>
On May 3, 6:15pm, Sweth Chandramouli wrote:
: Subject: Re: Re: exit value of intermediate program in pipe
:
: in ksh i would do
:
: {
: grep -v bar |&
: print -p `/bin/blah ; exitstatus=$?`
: read -p output
: echo $output
: return $exitstatus
: }
You can do exactly that same thing, except insted of
grep -v bar |&
You'd say
coproc grep -v bar
Both print -p and read -p are the same in zsh as in ksh.
Of course, you probably want
while read -p output
do print -r $output
done
as each read consumes only one line, not the entire stream.
: for zsh, would i just do
:
: {
: grep -v bar coproc |
: >&p `/bin/blah ; exitstatus=$?`
That line doesn't do what you think. What you'd want is just
/bin/blah >&p
exitstatus=$?
: <&p output ; echo $output
That's not right either. You'd probably need
cat <&p
and you'd probably have to start it before you started /bin/blah, if
blah could potentially produce more than a few kbytes of output.
: return $exitstatus
: }
The last problem is that grep won't exit until it sees EOF on its stdin,
but >&p dups the coproc input without actually closing it. So the grep
won't get EOF when blah exits. You have to shut it down some other way;
the only thing I've found is to start another coprocess. I don't know
if this is a bug, or what.
So you get
{
coproc grep -v bar
cat <&p &
/bin/blah >&p
exitstatus=$?
coproc exit # Shuts down grep by closing its input, as
# a side-effect of starting a new coproc
# which then immediately exits. Ewww.
wait # Allows cat to finish, just in case.
return $exitstatus
}
I think { /bin/blah >>(grep -v bar) } is a lot nicer, don't you?
: what zsh really needs is something like the hawksbill book from
: oreilly for ksh, that gives a lot of examples and compares it to other
: shells
There's a lot of that in the FAQ, found in Etc/FAQ in the zsh dist.
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Messages sorted by:
Reverse Date,
Date,
Thread,
Author