In Bash 4, puoi impostare -t
(timeout) a 0
. In questo caso, read
ritorna immediatamente con uno stato di uscita che indica se ci sono dati in attesa o meno:
# do some time consuming task here
while read -r -t 0; do read -r; done
read -p "Give me some input: " input
Non penso che ci sia un modo per cancellare stdin ma (con bash) puoi leggere e scartare ciò che c'è prima di chiedere l'input
#do some time consuming task here
read -t 1 -n 10000 discard
read -p "Give me some input: " input
Questo legge stdin e ha un timeout di 1 secondo, ma fallisce se ci sono più di 10000 caratteri in stdin. Non so quanto puoi ingrandire il parametro nchars.
read -d '' -t 0.1 -n 10000
Questo legge più righe di input, se l'utente ha inavvertitamente premuto invio più volte