* Re: coproc tutorial (Re: questions)
@ 1999-10-04 16:10 Jay Sekora
1999-10-04 18:42 ` Bart Schaefer
0 siblings, 1 reply; 3+ messages in thread
From: Jay Sekora @ 1999-10-04 16:10 UTC (permalink / raw)
To: zsh-users
It seems a little bit non-orthoganal that you can only have one
coprocess. (And I think that probably defeats some of the potential
value of coprocesses, which otherwise would let multiple background
pipelines communicate with each other in arbitrarily complex ways. Has
anybody thought about the possibility of adding support for multiple
coprocesses to some misty future version of zsh? Or am I missing the
point of supporting a coprocess? (Entirely plausible, since I've never
used them.)
-j.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: coproc tutorial (Re: questions)
1999-10-04 16:10 coproc tutorial (Re: questions) Jay Sekora
@ 1999-10-04 18:42 ` Bart Schaefer
1999-10-05 1:23 ` Elusive coproc bug (Re: coproc tutorial (Re: questions)) Bart Schaefer
0 siblings, 1 reply; 3+ messages in thread
From: Bart Schaefer @ 1999-10-04 18:42 UTC (permalink / raw)
To: zsh-users
On Oct 4, 12:10pm, Jay Sekora wrote:
> Subject: Re: coproc tutorial (Re: questions)
> It seems a little bit non-orthoganal that you can only have one
> coprocess.
It's not the case that there can be only one coprocess. The restriction
is that there can be only one pair of file descriptors referred to by the
special "p" name, and closing them frequently has the effect of stopping
the coprocess; but if you've copied those descriptors elsewhere you can
still use the copies to communicate with the process.
E.g.
coproc tr a-z A-Z
exec 5>&p ;: descriptor 5 is now the input of tr
exec 6<&p ;: descriptor 6 is now the output of tr
coproc sed s/DOG/CAT/ 5>&-
exec 7>&p ;: descriptor 7 is now the input of sed
exec 8<&p ;: descriptor 8 is now the output of sed
coproc exit ;: close p
cat <&6 >&7 5>&- 7>&- & : tr is now connected to sed
exec 6<&- 7>&- ;: close shell copies of descriptors
echo dog >&5 ;: send tr some input
exec 5>&- ;: close 5 so tr will exit
cat <&8 ;: should print CAT
There are some oddities here ... first, note how I had to explicitly close
descriptor 5 in the second coproc, and 5 and 7 in the backgrounded "cat".
That's because they don't have the close-on-exec flag set; if I don't close
them, "tr" and "sed" never see end-of-file. I'm not sure whether that is
correct behavior or not.
Second, this doesn't actually work in 3.0.6, because zsh "leaks" copies of
descriptors 5 and 7 as descriptors 13 and 14 ("strace" is your friend), so
even after all my careful descriptor-closing I still can't get "tr" to see
EOF. It works in 3.1.6, so I may have a look at fixing it in 3.0.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Elusive coproc bug (Re: coproc tutorial (Re: questions))
1999-10-04 18:42 ` Bart Schaefer
@ 1999-10-05 1:23 ` Bart Schaefer
0 siblings, 0 replies; 3+ messages in thread
From: Bart Schaefer @ 1999-10-05 1:23 UTC (permalink / raw)
To: zsh-users
On Oct 4 I wrote:
} Subject: Re: coproc tutorial (Re: questions)
}
} coproc tr a-z A-Z
} exec 5>&p ;: descriptor 5 is now the input of tr
} exec 6<&p ;: descriptor 6 is now the output of tr
} coproc sed s/DOG/CAT/ 5>&-
} exec 7>&p ;: descriptor 7 is now the input of sed
} exec 8<&p ;: descriptor 8 is now the output of sed
} coproc exit ;: close p
} cat <&6 >&7 5>&- 7>&- & : tr is now connected to sed
} exec 6<&- 7>&- ;: close shell copies of descriptors
} echo dog >&5 ;: send tr some input
} exec 5>&- ;: close 5 so tr will exit
} cat <&8 ;: should print CAT
}
} [...] this doesn't actually work in 3.0.6, because zsh "leaks" copies of
} descriptors 5 and 7 as descriptors 13 and 14 ("strace" is your friend)
I've now completely failed to duplicate this bug both on the machine where
I first noticed it and on my machine at home, so it must depend on some
other thing that I did earlier within that same shell. That worries me
a bit, so if any of you happen to feel like experimenting with this (or
have any idea what may be going on), I'd appreciate hearing about it.
Meanwhile, the above appears to work as expected in a freshly-started zsh
of either version series.
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~1999-10-05 1:23 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-10-04 16:10 coproc tutorial (Re: questions) Jay Sekora
1999-10-04 18:42 ` Bart Schaefer
1999-10-05 1:23 ` Elusive coproc bug (Re: coproc tutorial (Re: questions)) Bart Schaefer
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).