Como posso usar o caractere de retrocesso como backspace ao digitar uma senha? [fechadas]

1

Acabei de ver este código em algum lugar.
Permite ao usuário digitar sua senha e alterá-la para um asterisco / estrela.
Mas não reconhece a chave de retrocesso.
O código pensa que o backspace é parte da senha.
O que devo fazer para reconhecer o backspace?
E alguém pode explicar esse código para mim?
Especialmente o IFS, as opções de leitura e o $ '\ 0'
Obrigado!

Aqui está o código.

\#!/bin/bash
unset password
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'
\#!/bin/bash
unset password
prompt="Enter Password:"
while IFS= read -p "$prompt" -r -s -n 1 char
do
if [[ $char == $'%pre%' ]]
then
    break
fi
prompt='*'
password+="$char"
done
echo
echo "Done. Password=$password"
' ]] then break fi prompt='*' password+="$char" done echo echo "Done. Password=$password"
    
por user158335 24.05.2013 / 12:19

1 resposta

4

Tente isto:

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

As opções do comando read são:
-p: Prompt string.
-r: Não use barra invertida como caractere de escape.
-s: modo silencioso, entradas não são ecoadas.
-n 1: Número de caracteres para entrada.

read retorna 0 a menos que char seja encontrado e o caractere digitado pelo usuário seja colocado na variável IFS= .

A parte read limpa a variável IFS, o que garante que qualquer espaço ou caractere de tabulação digitado seja incluído na senha em vez de ser analisada por %code% .

    
por Dipto 24.05.2013 / 13:44

Tags