Por que não consigo incrementar var loop externo no shell script

1

Estou usando este script para criar um contador e quero acessá-lo fora do loop interno, mas não estou tendo sorte. O que estou perdendo?

while [ 1 ] 
do
        COUNTER=0
        ls /tmp/paping* | grep -v pid | while read pap
        do
                ret='cat $pap'
                if [ "a$ret" == "aTimeout" ]
                then
                        echo "Do something"
                else
                        arr[$COUNTER]=$pap
                        COUNTER=$(( COUNTER + 1 ))
                fi
                sleep 0.3
                echo $COUNTER
        done
#THIS LINE RETURNs 0
        echo $COUNTER
done
    
por Lucas César 05.01.2018 / 17:57

2 respostas

3

Como @steeldriver me apontou, quando eu canalizo eu crio um subshell e os valores var não são passados para o var externo.

Como este link fornece

A solução seria algo assim:

while [ 1 ] 
do
        COUNTER=0
 while read pap
        do
                ret='cat $pap'
                if [ "a$ret" == "aTimeout" ]
                then
                        echo "do something"
                else
                        arr[$COUNTER]=$pap
                        COUNTER=$(( COUNTER + 1 ))
                fi
                sleep 0.3
                echo $COUNTER
        done < <( ls /tmp/paping* | grep -v pid)
        echo $COUNTER
done

Agora meu contador está funcionando como esperado!

    
por Lucas César 05.01.2018 / 18:13
0

Supondo que seu shell é bash , colocar o comando shopt -s lastpipe no topo do seu script é uma solução possível.

    
por egmont 05.01.2018 / 20:02