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


Я только что видел этот код.
Он позволяет пользователю ввести свой пароль и изменить его на звездочку / звезду.
Но он не распознает ключ 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"

1
2018-05-24 10:19


происхождения


Вместо того, чтобы возиться с обычным методом изменения пароля и риска блокировки, просто используйте стандартный passwd команды в сеансе терминала. В любом случае, когда вы вводите пароль, символы не отражаются на экране по соображениям безопасности, поэтому скрипт, который вы скопировали в своем вопросе, ничего не делает. - Clive van Hilten
Я на самом деле пишу программу, которая создает учетную запись пользователя. Поэтому мне нужен этот сценарий как часть моей программы. - user158335
Это выглядит как домашнее задание для курса. Пометить это как Слишком локализованный, - user68186
я думаю unix.stackexchange.com это лучшее место, чтобы спросить об этом. - Eric Carvalho


ответы:


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

#!/bin/bash
unset password
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char 
do
    if [[ $char == $'\0' ]];     then
        break
    fi
    if [[ $char == $'\177' ]];  then
        prompt=$'\b \b'
        password="${password%?}"
    else
        prompt='*'
        password+="$char"
    fi
done
echo " "
echo "Done. Password=$password" 

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

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

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


4
2018-05-24 11:44



Спасибо, что объяснили! Но, к сожалению, код по-прежнему не работает. Какая польза от \ 177? - user158335
@ user158335, 177 - значение обратного пространства в восьмеричном. $\177 используется для проверки ввода - это пробел или нет. Этот код отлично работает в моей системе. в чем проблема, с которой вы сталкиваетесь? - Dipto
Теперь все в порядке! Ха-ха. Я использовал свою предыдущую программу вместо вашей. Еще раз спасибо!! - user158335