En Bash 4, puede configurar -t
(tiempo de espera) a 0
. En este caso, read
regresa inmediatamente con un estado de salida que indica si hay datos en espera o no:
# do some time consuming task here
while read -r -t 0; do read -r; done
read -p "Give me some input: " input
No creo que haya una forma de borrar la entrada estándar, pero (con bash) puede leer y descartar lo que hay antes de solicitar la entrada
#do some time consuming task here
read -t 1 -n 10000 discard
read -p "Give me some input: " input
Esto lee stdin y tiene un tiempo de espera de 1 segundo, aunque falla si hay más de 10000 caracteres en stdin. No sé qué tan grande puedes hacer el parámetro nchars.
read -d '' -t 0.1 -n 10000
Esto lee múltiples líneas de entradas, si el usuario presionó inadvertidamente ingresar varias veces