Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: coproc problem when input closed but output open



On Mar 15,  2:04pm, Rory Mulvaney wrote:
}
} Now I'm having trouble with another example, where the coproc doesn't 
} return without killing it.  Maybe the problem has something to do with the 
} output file descriptor of the coproc still being open.  But shouldn't the 
} coproc finish writing its output and exit?

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.



Messages sorted by: Reverse Date, Date, Thread, Author