Tengo el siguiente script bash:
# do some time consuming task here
read -p "Give me some input: " input
Ahora, como habrás adivinado, si un usuario presiona algunas teclas aleatorias durante la "tarea que consume mucho tiempo", la entrada no deseada también se tiene en cuenta. ¿Cómo borro stdin(o al menos lo ignoro) antes de emitir el comando de lectura?

Respuestas:
No creo que haya una manera de borrar stdin pero (con bash) puedes leer y descartar lo que hay antes de pedir la entrada
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.
fuente
En Bash 4, puede establecer
-t(tiempo de espera) en0. En este caso,readregresa inmediatamente con un estado de salida que indica si hay datos en espera o no:fuente
Esto lee múltiples líneas de entradas, si el usuario presionó inadvertidamente ingresar varias veces
fuente
esto funcionó bien para mí:
fuente
-een este caso?Adjunte la tarea que consume tiempo en un bloque cuyo stdin está cerrado:
fuente
readseguirá leyendo la primera línea ingresada durante la# time consumingtarea. Además, si el script no contiene ningún comando que lea stdin después dereadeso, las líneas no leídas se ejecutan en el terminal interactivo después de que finaliza el script. ¿Alguien probó con éxito esto?Sobre la base de la respuesta de Christophjaeger, agregué
-spara que la entrada no se repita en la terminal y-npara que no espere una nueva línea.fuente
-nes una buena idea, pero dos respuestas anteriores ya lo han mencionado. Y dado que el objetivo de este ejercicio es leer y descartar todo lo que se escribió antes de sureadejecución , no entiendo qué bien cree-sque va a hacer.fuente