Cuando lee una línea completa con opciones simples read
(u read -r
otras opciones que no afectan este comportamiento), el editor de línea provisto por el núcleo reconoce la Backspaceclave para borrar un carácter, así como algunos otros comandos (incluso Returnpara finalizar la entrada línea y enviarlo). Las teclas de acceso directo se pueden configurar con la stty
utilidad. Se dice que el terminal está en modo cocinado cuando su editor de línea está activo. En modo sin formato, cada carácter escrito en el teclado se transmite a la aplicación de inmediato. En el modo cocinado, los caracteres se almacenan en un búfer y solo se transmiten líneas completas a la aplicación.
Para dejar de leer después de un número fijo de caracteres para implementar read -n
, bash tiene que cambiar al modo sin formato. En modo sin procesar, el terminal no procesa la Backspacetecla (cuando presiona Backspace, el carácter anterior ya se ha enviado a bash), y bash tampoco procesa nada (presumiblemente porque esto le da una mayor flexibilidad de permitir que el script haga su propio procesamiento).
Puede pasar la opción -e
para habilitar el editor de línea propio de bash (readline, que es un editor de línea adecuado, no como el extremadamente crudo del núcleo). Como bash está haciendo la edición de línea, puede dejar de leer una vez que tenga el número de caracteres solicitado.
read
lee el "número de caracteres ingresados" aún no tiene respuesta.