Коли ви читаєте цілий рядок із простими read
(або read -r
іншими параметрами, які не впливають на цю поведінку), редактор рядків, що надається ядром, розпізнає Backspaceключ для видалення одного символу, а також дуже мало інших команд (у тому числі Returnдля завершення введення рядок і надішліть). Клавіші швидкого доступу можна налаштувати за допомогою stty
утиліти. Кажуть, що термінал знаходиться в готованому режимі, коли його редактор рядків активний. У сирому режимі кожен символ, введений на клавіатурі, передається програмі негайно. У приготовленому режимі символи зберігаються в буфері і в програму передаються лише повні рядки.
Для того, щоб припинити читання після фіксованої кількості символів, щоб реалізувати read -n
, bash повинен перейти в режим "raw". У сирому режимі термінал не здійснює жодної обробки Backspaceключа (до моменту натискання Backspaceпопередній символ уже надісланий до bash), а також bash не здійснює жодної обробки (мабуть тому, що це дає більшу гнучкість дозволу сценарію зробити власну обробку).
Ви можете -e
увімкнути опцію, щоб увімкнути власний редактор рядків bash (readline, який є належним редактором рядків, не таким, як надзвичайно грубий). Оскільки bash виконує лінійне видання, він може перестати читати, як тільки має потрібну кількість символів.
read
читається "кількість введених символів", все ще не відповідає.