Cómo suprimir el eco de la función de lectura con errores

Cómo suprimir el eco de la función de lectura con errores

Estoy intentando capturar una pulsación de tecla en un script de Shell (por ejemplo, usando read) y no repetirla. Los tres métodos que encontré fueron stty -echoel -scambio y la redirección de transmisión.

Sin embargo, en macOS, que parece utilizar una implementación de FreeBSD, ninguno de estos funciona de manera consistente.

El siguiente script muestra el problema:

while true; do
    stty -echo
    read -s -n 1 CHAR &>/dev/null
    stty echo
done

Al presionar las flechas hacia arriba y hacia abajo al mismo tiempo, a veces el comando hace eco A^[[Bo B^[[A. Esto ocurre particularmente a menudo cuando la máquina va lenta (debido a una batería baja), lo que indica alguna condición de carrera.

¿Me estoy perdiendo de algo? De lo contrario, ¿cómo puedo solucionar este problema?

Respuesta1

En su bucle, hay un breve período de tiempo entre el "stty echo" al final del bucle y el "stty -echo" en la siguiente iteración. La entrada del teclado recibida durante esta ventana se repetirá, aunque no haya ningún comando de lectura esperando. Si no quieres ecos, no llames "stty echo"

información relacionada