Subject: bug#22205: closed (Re: bug#22205: tee bug?)

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 18 Dec 2015 16:44:02 +0000

Your bug report

#22205: tee bug?

which was filed against the coreutils package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
22205: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=22205
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#22205: tee bug?
From: Eric Blake <[email-masked]>
To: Nacho Esteban <[email-masked]>, [email-masked]
Date: Fri, 18 Dec 2015 09:43:51 -0700
List-Id: <debbugs-submit.debbugs.gnu.org>

tag 22205 notabug
thanks

On 12/18/2015 06:18 AM, Nacho Esteban wrote:
> Hi team,
> 
> I detected an strange behaviour of tee command that may bee a bug.

Not a bug in tee, but intentional behavior of your shell.

> 
> Please consider this script snippet
> 
>    VAR=""
> 
>    A() {
>         VAR="This is my value"
>         echo "VAR in $FUNCNAME: $VAR"
>    }
> 
>    BA() {
>         A | tee /tmp/kk

You are using a pipeline.  Shells implement pipelines by running the
left command (here, the function A) in a subshell. (POSIX also says that
the right command can also be a subshell, but there it is not required;
ksh runs the right command in the current shell, and bash used to run it
in a subshell but new enough bash now has a knob you can turn on to
emulate ksh behavior).

Therefore, all changes to the environment made during the execution of A
are local to that subshell, and are lost as soon as the subshell exits.

>         echo "VAR in $FUNCNAME: $VAR"

Thus, here you print the value of $VAR as it was before A ran, since
running A does not affect the current shell.

> In fact if "| tee /tmp/kk" is removed value of VAR is properly visible
> from BA function:

Because then you no longer have a subshell, so now the execution of
function A affects the current shell.  Again, not tee's fault.  You
could replace it with "| :" and see the same effect.

> This e-mail (including any attachments) is confidential and may be
> privileged or

Such a disclaimer is unenforceable on publically-archived lists, and you
may want to consider not using your employer's spammy email gateway when
sending mail to public lists.

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Subject: tee bug?
From: Nacho Esteban <[email-masked]>
To: [email-masked]
Date: Fri, 18 Dec 2015 14:18:07 +0100
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi team,

I detected an strange behaviour of tee command that may bee a bug.

Please consider this script snippet

    VAR=""

    A() {
         VAR="This is my value"
         echo "VAR in $FUNCNAME: $VAR"
    }

    BA() {
         A | tee /tmp/kk
         echo "VAR in $FUNCNAME: $VAR"
    }

This is the output when when executed:

    $ BA
    VAR in A: This is my value
    VAR in BA:

I miss the value of VAR inside BA function.

In fact if "| tee /tmp/kk" is removed value of VAR is properly visible 
from BA function:

    VAR=""

    A() {
         VAR="This is my value"
         echo "VAR in $FUNCNAME: $VAR"
    }

    BA() {
         A
         echo "VAR in $FUNCNAME: $VAR"
    }

    $ BA
    VAR in A: This is my value
    VAR in BA: This is my value

Many thanks for your priceless effort,
Nacho

*Juan Ignacio Esteban*

Integration Architect & Security Officer | Integration Centre of Expertise

*Walgreens Boots Alliance - Enterprise IT Shared Services - Retail 
Pharmacy International & Pharmaceutical Wholesale*

Pol. Ind. San Miguel Sector 4 | Villanueva de Gállego | Zaragoza (Spain) 
| 50830

*Member of Walgreens Boots Alliance *

Walgreens Boots Alliance Services Limited is registered in England & Wales with
company number 7073433 
Registered Office: 2 The Heights, Brooklands, Weybridge, Surrey, KT13 0NY 
Walgreens Boots Alliance Services Limited is a member of Walgreens Boots
Alliance. 

This e-mail (including any attachments) is confidential and may be privileged or
otherwise protected. It may be read, copied and used only by the intended
recipient. If you are not the intended recipient you should not copy it or use it
for any purpose or disclose its contents to another person. If you have received
this message in error, please notify us and remove it from your system. Messages
sent to and from companies in the Walgreens Boots Alliance company may be
monitored to ensure compliance with internal policies and to protect our
business. Emails are not secure and cannot be guaranteed to be error free. We
cannot accept liability for any damage you incur as a result of virus infection.