valor da variável shell no loop for diferente após o loop

3

Eu tenho um desafio com um valor de variável alterado em um loop for e o valor dessa variável após o loop for e usando tee

SCRIPT_1:

    STATUS=9
    for  SESSION in  A B C
    do
       STATUS=5
       echo "SESSION=$SESSION  STATUS=$STATUS"
    done 
    echo "STATUS=$STATUS"

script de saída_1 é:

    SESSION=A  STATUS=5
    SESSION=B  STATUS=5
    SESSION=C  STATUS=5
    STATUS=5

SRIPT_2:

    STATUS=9
    for  SESSION in  A B C
    do
       STATUS=5
       echo "SESSION=$SESSION  STATUS=$STATUS"
    done | tee /tmp/ses.txt
    echo "STATUS=$STATUS"

output_2 é:

    SESSION=A  STATUS=5
    SESSION=B  STATUS=5
    SESSION=C  STATUS=5
    STATUS=9

Por que uma saída diferente ao usar o tee após o comando done.

    
por Paulus 17.11.2016 / 12:40

1 resposta

2

Quando você coloca um "| tee", o shell que está interpretando o script está bifurcando um novo shell para o loop. Inserir uma suspensão no loop e iniciar o script em segundo plano fornece essa lista de processos:

   PID TTY       TIME COMMAND
 21168 pts/0     0:00 sh
 21259 pts/0     0:00 ps
 11962 pts/0     0:00 sh
 21170 pts/0     0:00 sleep
 21171 pts/0     0:00 tee
 21169 pts/0     0:00 sh

Como você pode ver, há um shell adicional no final da lista. Você pode obter o mesmo resultado com este script:

STATUS=9
echo "" > /tmp/ses.txt
for  SESSION in  A B C
do
   STATUS=5
   echo "SESSION=$SESSION  STATUS=$STATUS" | tee -a /tmp/ses.txt
done
echo "STATUS=$STATUS"

mas sem o efeito colateral que você está mencionando.

    
por 17.11.2016 / 15:22