Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Saving error return code in a pipeline
- X-seq: zsh-users 9002
- From: Stephane Chazelas <Stephane@xxxxxxxxxxxxx>
- To: Zsh Users <zsh-users@xxxxxxxxxx>
- Subject: Re: Saving error return code in a pipeline
- Date: Thu, 30 Jun 2005 13:00:58 +0100
- In-reply-to: <20050630093307.GA23323@DervishD>
- Mail-followup-to: Zsh Users <zsh-users@xxxxxxxxxx>
- Mailing-list: contact zsh-users-help@xxxxxxxxxx; run by ezmlm
- References: <20050630093307.GA23323@DervishD>
On Thu, Jun 30, 2005 at 11:33:07AM +0200, DervishD wrote:
> Hi all :)
>
> Maybe I'm asking for something impossible, or maybe I'm just dumb
> enough to not see the obvious solution...
>
> I have a script which returns an error code, but it outputs a lot
> of info, so I call it like this:
>
> script.install |& tee install.log
>
> Obviously this 'masks' the return code, but I want to see the
> output even though I'm saving it to a file, so a redirection doesn't
> fit me well. I can use MULTIOS, of course, but I don't want to use it
> for all my commands...
>
> Is there any better solution than this?:
>
> script.install >(tee install.log) 2>&1
[...]
zsh has what it calls mult_ios (mult_ios option which is on by
default) that performs a tee internally when a fd is redirected
several times.
script.install >&1 > install.log 2>&1
Once zsh sees > install.log, it realises that it's the second
time fd 1 is being redirected, so it creates a pipe and a
background process that reads from that pipe and writes what
it's reading both to your terminal and install.log, then
redirects stdout to it. Then 2>&1 redirects stderr as well to
that pipe.
But you can also do:
script.install |& tee install.log
script_exit_status=$pipestatus[1]
--
Stephane
Messages sorted by:
Reverse Date,
Date,
Thread,
Author