Как я могу использовать символ возврата в качестве возврата при вводе пароля? [закрыто]

Я только что где-то видел этот код.
Это позволяет пользователю ввести свой пароль и изменить его на звездочку / звездочку.
Но он не распознает клавишу возврата.
Код считает, что пробел является частью пароля.
Что мне сделать, чтобы он распознал backspace?
А кто-нибудь может объяснить мне этот код?
Особенно IFS, параметры чтения и $ '\ 0'
Спасибо!

Вот код.

\#!/bin/bash
unset password
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'\0' ]]
then
    break
fi
prompt='*'
password+="$char"
done
echo
echo "Done. Password=$password"
2
задан 24 May 2013 в 14:29

1 ответ

Попробуйте это:

#!/bin/bash
unset password
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char 
do
    if [[ $char ==  

Опции команды чтения:
-p: строка подсказки.
-r: не использовать обратную косую черту в качестве escape-символа.
-s: бесшумный режим, входы не отображаются.
-n 1: количество символов для ввода.

read возвращает 0, если не встречается \0, а символ, который вводит пользователь, помещается в переменную char.

Часть IFS= очищает переменную IFS, которая гарантирует, что любые символы пробела или табуляции, которые вы вводите, включены в пароль, а не анализируются read.

\0' ]]; then break fi if [[ $char ==

Опции команды чтения:
-p: строка подсказки.
-r: не использовать обратную косую черту в качестве escape-символа.
-s: бесшумный режим, входы не отображаются.
-n 1: количество символов для ввода.

read возвращает 0, если не встречается \0, а символ, который вводит пользователь, помещается в переменную char.

Часть IFS= очищает переменную IFS, которая гарантирует, что любые символы пробела или табуляции, которые вы вводите, включены в пароль, а не анализируются read.

\177' ]]; then prompt=

Опции команды чтения:
-p: строка подсказки.
-r: не использовать обратную косую черту в качестве escape-символа.
-s: бесшумный режим, входы не отображаются.
-n 1: количество символов для ввода.

read возвращает 0, если не встречается \0, а символ, который вводит пользователь, помещается в переменную char.

Часть IFS= очищает переменную IFS, которая гарантирует, что любые символы пробела или табуляции, которые вы вводите, включены в пароль, а не анализируются read.

\b \b' password="${password%?}" else prompt='*' password+="$char" fi done echo " " echo "Done. Password=$password"

Опции команды чтения:
-p: строка подсказки.
-r: не использовать обратную косую черту в качестве escape-символа.
-s: бесшумный режим, входы не отображаются.
-n 1: количество символов для ввода.

read возвращает 0, если не встречается \0, а символ, который вводит пользователь, помещается в переменную char.

Часть IFS= очищает переменную IFS, которая гарантирует, что любые символы пробела или табуляции, которые вы вводите, включены в пароль, а не анализируются read.

0
ответ дан 24 May 2013 в 14:29

Другие вопросы по тегам:

Похожие вопросы: