Como atribuir um valor a uma variável dentro de um loop for no bash?

1

Gostaria de avaliar a variável chamada arduino fora do loop for, mas sempre me dá 0.

arduino=0
for sysdevpath in $(find /sys/bus/usb/devices/usb*/ -name dev); do
    (
        syspath="${sysdevpath%/dev}"
        devname="$(udevadm info -q name -p $syspath)"
        [[ "$devname" == "bus/"* ]] && continue
        eval "$(udevadm info -q property --export -p $syspath)"
        [[ -z "$ID_SERIAL" ]] && continue
        dispositivo="/dev/$devname - $ID_SERIAL"
        if [[ $dispositivo == *"Arduino"* ]]; then
            arduino=1
            echo 'CONNECTED DEVICE'
        fi
    )
done

if [ $arduino -eq 1 ]; then
    echo 'CONNECTED DEVICE'
else
    echo 'DISCONNECTED DEVICE'
fi
    
por Ruben 06.08.2016 / 21:27

1 resposta

8

Os parênteses ( ... ) apresentam um subshell. Variáveis em um subshell são herdadas do shell pai, mas não são propagadas de volta para ele.

Remover os parênteses deve fazê-lo funcionar.

    
por 06.08.2016 / 21:39