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

Re: Redirect a specific file descriptor to a pipe?

On Mar 10,  4:32pm, Nathan Dorfman wrote:
} I still think it might be useful to be able to pipe any fd, not just
} stdout, but I don't know if I can contrive a great example.

It depends on what your intentions are.  The definition of a pipeline
in shell syntax is that the standard output of the left side connects
to the standard input of the right side.  So if you want to use a pipe,
you have to make the right thing *be* stdout, regardless of which other
descriptor it might have started out to be.

So when I talk about intentions: Where do you expect stdout of the left
side to go if some other descriptor is feeding the pipe?

} Perhaps we
} can't redirect stdout because it's a curses program that needs direct
} terminal access, but we want to do something like this:
} strace -o /dev/fd/3 mutt 3>XXX
} Where instead of XXX, we want to send fd 3 to |xz or |ssh?

In that example you want "mutt" to remain the foreground process (it
can't share the terminal with xz or ssh).  So you have to run xz in
the background.  That is what process substitution is for:

    strace -o /dev/fd/3 mutt 3>>(xz)

This puts xz in the background with its input connected to fd 3 and
it's output still connected to the terminal, while mutt stays in the
foreground with stdin + stdout unchanged.

It's up to you (or to xz) to make sure the subshell doesn't attempt to
spew something onto the terminal mutt is using.

On Mar 11,  1:17am, Mikael Magnusson wrote:
} whatever_command 5> >(pipe command here) 7> >(some other pipe here)
} but now that i'm testing it, it seems to not complete when it should

It's not hung, >(some other pipe here) is in the background so its
output has probably been printed below the prompt.  Try

strace -o /dev/fd/7 =true 7> >(cat); wait

which will wait for >(cat) to finish before printing another prompt [it
is a relatively recent change to zsh that you can "wait" for process
substitution background jobs].

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