Lorsque vous lisez une ligne entière avec plain read
(ou d' read -r
autres options qui n'affectent pas ce comportement), l'éditeur de ligne fourni par le noyau reconnaît la Backspaceclé pour effacer un caractère, ainsi que très peu d'autres commandes (y compris Returnpour terminer l'entrée ligne et l'envoyer). Les touches de raccourci peuvent être configurées avec l' stty
utilitaire. Le terminal est dit en mode cuit lorsque son éditeur de ligne est actif. En mode brut, chaque caractère tapé sur le clavier est immédiatement transmis à l'application. En mode cuit, les caractères sont stockés dans un tampon et seules les lignes complètes sont transmises à l'application.
Pour arrêter la lecture après un nombre fixe de caractères afin de l'implémenter read -n
, bash doit passer en mode brut. En mode brut, le terminal ne fait aucun traitement de la Backspacetouche (au moment où vous appuyez Backspace, le caractère précédent a déjà été envoyé à bash), et bash ne fait aucun traitement non plus (probablement parce que cela donne la plus grande flexibilité de permettre au script de faire son propre traitement).
Vous pouvez passer l'option -e
pour activer le propre éditeur de ligne de bash (readline, qui est un bon éditeur de ligne, pas comme celui extrêmement brut du noyau). Puisque bash fait l'édition en ligne, il peut arrêter la lecture une fois qu'il a le nombre de caractères demandé.
Gilles 'SO- arrête d'être méchant'
la source
read
le «nombre de caractères saisis» est toujours sans réponse.