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

Multios again (Re: Piping stderr (was Re: Two bug reports))



On Mar 23, 10:45pm, Bart Schaefer wrote:
}
} The same problem with MULTIOS occurs with `3>&2 2>&1 1>&3 |'.

Given that we have the >(...) syntax, I'm wondering there should be a way
to allow multios for redirections but not for pipes.  That would mean that
in `command >file1 >file2 | prog', file1 and file2 would get output but the
pipe would get nothing.  That way, `command 2>&1 >file | prog' would work
the way it does in other shells, and if you really mean for `prog' to get
a copy of the input you can write `command 2>&1 >file >>(prog)' instead.

It further would mean that `command 2>>(prog1) >file | prog2' would send
ONLY the output of `prog1' through `prog2', which seems to be partly what
Wayne was getting at with his question.

Various weird tidbits while I'm on the subject:

Using `1>&1' creates some pretty strange effects; it duplicates stdout
2**N times (where N is the number of uses of `1>&1').  Let's look at a few
examples; the first two just set up the context.

zsh% (print -u2 foo; print bar) >>(tr a-z A-Z)
foo
zsh% BAR

We know that the >(...) runs asynchronously, so that's fine.

zsh% (print -u2 foo; print bar) >>(tr a-z A-Z) | wc
foo
      2       2       8

Shows that the stdout of the >(...) expression also goes to the pipe.  That
implies a simple way to make >(...) act semi-synchronously: pipe the whole
command to `cat'.

Now for the strange stuff:

zsh% (print -u2 foo; print bar) 1>&1 >>(tr a-z A-Z) | cat
foo
bar
bar
BAR

So `cat' got two copies of the original stdout and >(...) got one.  Yet:

zsh% (print -u2 foo; print bar) >>(tr a-z A-Z) 1>&1 | cat
foo
bar
bar
BAR
BAR

Here, 1>&1 duplicated the input to >(...) as well as to the pipe.  At first
I thought it had somehow duplicated the output of >(...), but:

zsh% (print -u2 foo; print bar) 2>>(tr a-z A-Z) 1>&1 | cat
bar
bar
FOO

Now for the real silliness:

zsh% (print -u2 foo; print bar) 1>&1 >>(tr a-z A-Z) 1>&1 | cat
foo
bar
bar
bar
bar
BAR
BAR

Can this really be the way it's supposed to work?

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com

Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net   



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