Read -s с таймаутом показывает текст после тайм-аута - PullRequest
0 голосов
/ 04 августа 2020

Здравствуйте, я использую чтение в bash, чтобы запросить пароль, и -s, чтобы скрыть ввод, и -t 10, чтобы тайм-аут, и все работает, как ожидалось, за исключением одного. Вот код (я использую переключатель массива):

read -t 10 -a mp -s -p "Enter Password:"

Он скрывает ввод, и если я ничего не набираю, он возвращается к запросу через 10 секунд. Но если я ввожу первые 10 символов из 12-символьного прохода, и время истекает, когда он возвращает, он показывает символы, которые я набрал в следующей строке.

Пример:

DD-WRT-Bash:~# read -t 10 -a mp -s -p "Enter Password:"

(i type testing123)

Если я не нажму Enter, и время истечет, следующая строка будет:

DD-WRT-Bash:~# testing123

То же самое происходит в Ubuntu. Есть ли способ предотвратить возврат текста на следующей строке?

1 Ответ

0 голосов
/ 04 августа 2020

Я предлагаю использовать опцию -N, чтобы обойти поведение read, которое заключается в использовании только полных строк ввода.

Описание -N начинается следующим образом:

-N символов read возвращается после чтения ровно n символов а не ждать полной строки ввода, если только EOF обнаружен или время ожидания чтения истекло.

Использование значения, достаточно большого, чтобы ваши пользователи не смогли достичь его до истечения времени ожидания:

read -t 10 -a mp -s -N 9999 -p "Enter Password:"

Неполная строка будет сохранена в массиве и не будет воспроизведена в следующей строке ввода вашей консоли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...