Мне очень понравился ответ, который дал Wirone , но мне не понравилось, что обратный пробел продолжит удаление символов даже в ответ на запрос "Введите пароль:".
У меня также были некоторые проблемы, когда слишком быстрое нажатие клавиш приводило к тому, что некоторые символы фактически печатались на экране ... никогда не получалось, запрашивая пароль. =)
Ниже приведена моя измененная версия ответа Wirone , в которой рассматриваются следующие проблемы:
#!/bin/bash
unset PASSWORD
unset CHARCOUNT
echo -n "Enter password: "
stty -echo
CHARCOUNT=0
while IFS= read -p "$PROMPT" -r -s -n 1 CHAR
do
# Enter - accept password
if [[ $CHAR == $'\0' ]] ; then
break
fi
# Backspace
if [[ $CHAR == $'\177' ]] ; then
if [ $CHARCOUNT -gt 0 ] ; then
CHARCOUNT=$((CHARCOUNT-1))
PROMPT=$'\b \b'
PASSWORD="${PASSWORD%?}"
else
PROMPT=''
fi
else
CHARCOUNT=$((CHARCOUNT+1))
PROMPT='*'
PASSWORD+="$CHAR"
fi
done
stty echo
echo $PASSWORD