Quando você lê uma linha inteira com opções simples read
(ou read -r
outras opções que não afetam esse comportamento), o editor de linhas fornecido pelo kernel reconhece a Backspacechave para apagar um caractere, além de alguns outros comandos (inclusive Returnpara concluir a entrada linha e envie). As teclas de atalho podem ser configuradas com o stty
utilitário. Diz-se que o terminal está no modo cozido quando o editor de linha está ativo. No modo bruto, cada caractere digitado no teclado é transmitido ao aplicativo imediatamente. No modo cozido, os caracteres são armazenados em um buffer e somente linhas completas são transmitidas ao aplicativo.
Para interromper a leitura após um número fixo de caracteres para implementar read -n
, o bash precisa alternar para o modo bruto. No modo bruto, o terminal não realiza nenhum processamento da Backspacetecla (quando você pressiona Backspace, o caractere anterior já foi enviado para o bash) e o bash também não realiza nenhum processamento (presumivelmente porque isso oferece maior flexibilidade de permitir que o script faça seu próprio processamento).
Você pode passar a opção -e
de ativar o editor de linhas do bash (readline, que é um editor de linhas adequado, não como o extremamente bruto do kernel). Como o bash está executando a edição de linha, ele pode parar de ler quando tiver o número solicitado de caracteres.
Gilles 'SO- parar de ser mau'
fonte
read
leitura do 'número de caracteres digitados' ainda não foi respondida.