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