use
        set --pipefail

        A pipeline will not complete until all components of the
        pipeline have completed, and the exit status of the pipeline
        will be the value of the last command to exit with non-zero
        exit status, or will be zero if all commands return zero exit
        status.

On Sun, 21 Mar 2010 09:11:00 -0400 Mario DeFazio wrote:
> Don't pipe to tee.

> Create an empty log file.
> Start a 'tail -f' background job on the log file and save the pid $!
> Invoke your function and redirect stdout to the log file.
> Kill the tail job when you're done. (You might want to do this in a cleanup
> function that is called via an EXIT/TERM/INT trap.)

> Hope this is helpful.

> Cheers,
>    Mario

> On 3/21/2010 1:32 AM, Eric Peterson wrote:
> > I'm having this same issue.  I would like to call a function which has its 
> > STDOUT and STDERR visible on the terminal, yet appended to the log file.  
> > And I want to know if my function finished successfully or had an error.  
> > So thinking I can do the following yet I am caught by this pipe happening 
> > after the $? is read.
> >
> > # -- attempt 1 ——————————
> >    function foo {
> >      print "in foo\n";
> >      return 1;
> >    }
> >
> >    foo arg1 arg2 | tee -ai a.log 2>&1
> >    rc=$?    # pipe returns its return code
> >    print "rc: $rc\n"
> >    (( rc>  0 ))&&  exit ${rc}
> > # -- attempt 1 ——————————
> >
> > Is there a way around this?  I tried:
> >
> > # -- attempt 2 --------------------
> >    integer rc=0
> >    {
> >      foo arg1 arg2
> >      rc=$?  # lost at closing brace
> >    } | tee -ai a.log 2>&1
> >    print "rc: $rc\n"
> >    (( rc>  0 ))&&  exit ${rc}
> > # -- attempt 2 --------------------
> >
> > but it prints 0 as the below example does.
> >
> > I did find one way, but I don't like it.
> >
> > # -- attempt 3 ——————————
> >    typeset rv=''
> >    integer rc=0
> >    rv=$( foo arg1 arg2 )  # hides actual running in a sub-process, until 
> > printed
> >    rc=$?
> >    print "${rv}" | tee -ai a.log 2>&1
> >    print "rc: $rc\n"
> >    (( rc>  0 ))&&  exit ${rc}
> > # -- attempt 3 ——————————
> >
> > but I have a function that takes a long time, I would like to see its 
> > progress on the terminal, instead of waiting for the print to occur after 
> > it's all done.
> >
> > Any other ideas?
> >
> >
> >
> > # —— output from 1&  2  ——————————
> > in foo
> > rc: 0
> > # —— output from 1&  2  ——————————
> >
> >
> >
> >
> > # —— output from 3  ——————————
> > in foo
> > rc: 1
> > # —— output from 3  ——————————
> >
> >
> >
> >
> >
> >
> > On 12 Mar 2010, at 13:10 , Cyrille Lefevre wrote:
> >
> >    
> >> Heiner Steven a écrit :
> >>      
> >>> how could I (in a reliable, portable way) retrieve the exit code of
> >>> the program "urldecode" in the following code fragment:
> >>>
> >>>     var=$(echo "$url" | urldecode)
> >>>        
> >> as already said, it's the return code of the last command whatever it is
> >> a pipeline or not.
> >>
> >> however :
> >>
> >> typeset var=$(...)
> >>
> >> is different than :
> >>
> >> typeset var=
> >> var=$(...)
> >>
> >> in the first case, the return code is the one of the typeset command and
> >> not the one of the var assignment. in other words, if the command fails
> >> in var assignment (i.e.: var=$(false)) the return code is still 0, since
> >> the var assignment is right (i.e.: var=something).
> >> hope I have been enough clear.
> >>
> >> Regards,
> >>
> >> Cyrille Lefevre
> >> -- 
> >> mailto:[email protected]
> >>
> >>
> >>
> >> _______________________________________________
> >> ast-users mailing list
> >> [email protected]
> >> https://mailman.research.att.com/mailman/listinfo/ast-users
> >>      
> >
> > _______________________________________________
> > ast-users mailing list
> > [email protected]
> > https://mailman.research.att.com/mailman/listinfo/ast-users
> >    
> _______________________________________________
> ast-users mailing list
> [email protected]
> https://mailman.research.att.com/mailman/listinfo/ast-users

_______________________________________________
ast-users mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-users

Reply via email to