From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22673 invoked by alias); 17 Mar 2011 21:17:27 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 15879 Received: (qmail 27768 invoked from network); 17 Mar 2011 21:17:26 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 Received-SPF: pass (ns1.primenet.com.au: SPF record at _spf.google.com designates 209.85.213.171 as permitted sender) Date: Thu, 17 Mar 2011 16:17:19 -0500 (CDT) From: Rory Mulvaney To: Bart Schaefer cc: zsh-users@zsh.org Subject: Re: coproc problem when input closed but output open In-Reply-To: <110316075735.ZM19183@torch.brasslantern.com> Message-ID: References: <110316075735.ZM19183@torch.brasslantern.com> User-Agent: Alpine 2.00 (DEB 1167 2008-08-23) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Thanks. On Wed, 16 Mar 2011, Bart Schaefer wrote: > You still have "cat <&6 &" running in the background. That has a copy of > the coproc's stdin (fd5) open, because it inherited all the descriptors > of the parent shell and fd5 is not specially closed the way the "p" > descriptor is. You can use > > cat <&6 5>&- & > > to be sure cat doesn't inherit fd5. > > It might be clearer if you restructure the code to be: > > coproc wcFunc > wcf=$! > > # copy output of coproc to stdout > cat <&p & > > # copy the write and read fd's for the coproc > exec 5>&p 6<&p > exec 6<&- > > # start another null coproc to get a new target for the p fd > coproc exit > > Then you don't need to fiddle with fd5 when starting the cat. >