Em vez de colocar o widget yesno
no canal, você pode fazer algumas pequenas alterações no script:
- cria um arquivo temporário, por exemplo, %código%
- adicione a opção
MYPIPE=$(mktemp)
ao widget--stderr
(para que não interfira nos dados reais) - altere o "sleep 1" para "echo sleep" (será processado posteriormente)
- modificar o final do loop para gravar os dados (que agora são canalizados usando a marca "|") para esse arquivo temporário e
- após o loop, execute o conjunto de dados, dormindo quando "dormir" for encontrado ou fazendo eco de outra forma e canalizando esse para o widget de medidor.
Um exemplo segue:
#!/bin/bash
MYPIPE=$(mktemp)
trap "rm -f $MYPIPE" EXIT ERR
PCT=0;i=0
while [[ $PCT -le 100 ]]
do
cat >>$MYPIPE <<EOF
XXX
$PCT
el % es ${PCT}
XXX
EOF
for i in 1 2 3 4 5
do
i=$((i+1))
dialog --stderr --yesno "$PCT: Si o No?" 15 61
case $? in
0)
PCT=$(($PCT+20));;
255)
echo "ESC pressed.";;
esac
done
echo sleep >>$MYPIPE
done
while :
do
read MYDATA
[ -z "$MYDATA" ] && break
[ "x$MYDATA" = "xsleep" ] && sleep 1
[ "x$MYDATA" != "xsleep" ] && echo "$MYDATA"
done <$MYPIPE | \
dialog --title "GAUGE" --gauge "Este es un ejemplo de gauge" 20 70 0