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.
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
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.
Tags bash linux shell shell-script for