Я только что где-то видел этот код.
Это позволяет пользователю ввести свой пароль и изменить его на звездочку / звездочку.
Но он не распознает клавишу возврата.
Код считает, что пробел является частью пароля.
Что мне сделать, чтобы он распознал 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"
Попробуйте это:
#!/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
.