Bash Process Substitution

Corinna Vinschen corinna-cygwin@cygwin.com
Thu Apr 14 12:46:00 GMT 2005


On Apr 14 08:04, Lev S Bishop wrote:
> I tried building bash from the source package, and then it uses either
> /dev/fd (if I have that as a symlink) or /proc/self/fd (if I don't),
> rather than the fifo that the binary package uses. So perhaps whoever
> built the binary package didn't have /proc/self/fd for whatever reason?

The bash package has been built before /proc/<pid>/fd came into existance.

> With my built bash.exe, process substitution seems to work for input:
> $ echo <(ls)
> /proc/self/fd/63
> $ cat <(echo hi)
> hi
> 
> But not for output:
> $ tar -cf >(cat) syntax.c
> tar: /proc/self/fd/63: Cannot open: Permission denied
> tar: Error is not recoverable: exiting now
> 
> I'm not sure how there can be a permissions problem or what to do about 
> it if there really is one, given that as I understand it 
> the /proc/self/fd/63 is effectively a symlink to one end of something 
> returned from pipe(2).

It's probably the wrong end.  In the Linux kernel there's some magic
going on which we can't reproduce in Cygwin so far.  Trying to open
an existing pipe for writing or reading opens apparently exactly the
right end of the pipe under Linux.  On Windows, you only get the exact
end of the pipe which is already available to the current process.  That's
the read side of the pipe, AFAICS, and that doesn't allow writing.  This
explains the "Permission denied".


HTH,
Corinna

-- 
Corinna Vinschen                  Please, send mails regarding Cygwin to
Cygwin Project Co-Leader          mailto:cygwin@cygwin.com
Red Hat, Inc.

--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/



More information about the Cygwin mailing list