Acredite ou não, é o zero que está bagunçando você. Se você alterá-lo para um número muito baixo como 0,01, ele funcionará. Você pode fazer stream ainda mais assim:
if $(read -t.01 -sn1); then exit 0; fi
Estou tentando implementar um tempo de espera que o usuário pode optar por pular pressionando qualquer tecla. Também não deve imprimir nada no terminal como eu estou usando para exibir uma barra de progresso. Eu estou tendo dificuldade para capturar e testar a entrada do usuário com a dificuldade adicional para ele não deve induzir mais atraso no tempo total de espera.
Aqui está o que eu tenho no momento:
read -t 0 input </dev/tty1
if [[ $input -ne "" ]]; then
exit 0
fi
E isso está dentro de um loop que atualiza a barra de progresso. Ele não consegue adicionar mais atraso ou imprimir linhas indesejadas, mas não cumpre sua função.
-t 0 para não adicionar mais atraso
lendo de "/ dev / tty1" para não adicionar linhas indesejadas
Como posso conseguir isso?
Acredite ou não, é o zero que está bagunçando você. Se você alterá-lo para um número muito baixo como 0,01, ele funcionará. Você pode fazer stream ainda mais assim:
if $(read -t.01 -sn1); then exit 0; fi
Você quer executar duas coisas em paralelo.
Para conseguir isso, não coloque o comando read
dentro do loop.
Em vez disso, faça algo assim:
for i in {1..10}; do sleep 0.5s; echo ${i}0; done | zenity --progress --auto-close --text="waiting for input...5sec" 2>/dev/null &
read -t 5 asd && kill $!
(coloque as duas linhas acima em um arquivo (digamos abc.sh) e execute bash abc.sh
)
Explicação:
O primeiro comando (para atualizar a barra de progresso) é enviado para o plano de fundo com & amp; . Se o comando de leitura for concluído primeiro, kill $!
fechará a barra de progresso.
Nota: Verifique o Paralelo GNU . Isso ajudaria você a fazer mais coisas em paralelo.