web-dev-qa-db-fra.com

Comment utiliser le caractère de retour arrière comme retour arrière lors de la saisie d'un mot de passe?

Je viens de voir ce code quelque part.
Il permet à l’utilisateur de saisir son mot de passe et de le remplacer par un astérisque/étoile.
Mais il ne reconnaît pas la touche de retour arrière.
Le code pense que le retour arrière fait partie du mot de passe.
Que dois-je faire pour lui faire reconnaître le recul?
Et quelqu'un peut-il m'expliquer ce code?
Notamment l'IFS, les options de lecture et le $ '\ 0'
Merci!

Voici le code.

\#!/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
user158335

Essaye ça:

#!/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" 

Les options de la commande de lecture sont les suivantes:
- p: chaîne d'invite.
- r: N'utilisez pas de barre oblique inverse comme caractère d'échappement.
- s: mode silencieux, les entrées ne sont pas répercutées.
- n 1: Nombre de caractères à saisir.

read renvoie 0 à moins que \0 soit rencontré et que le caractère saisi par l'utilisateur soit placé dans la variable char.

La partie IFS= efface la variable IFS, ce qui garantit que tous les caractères d'espace ou de tabulation que vous tapez sont inclus dans le mot de passe au lieu d'être analysés par read.

5
Dipto