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"
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
.