Suponho que você não esteja mostrando todo o código, então line 36
é realmente a declaração read
do snippet que você postou.
A declaração read
está errada. IMHO você quer dizer
read -p "$PROMPT" -r -s -n1 CHAR
-
$PROMPT
é o parâmetro para-p
, imprimindo um '*' ou nada na entrada. -
-n
também precisa de um parâmetro, informando quantos caracteres ler de uma vez. - A variável
$CHAR
é usada mais tarde, mas nunca é atribuída porread
Além disso, $PASSWORD
conterá apenas o último caractere, já que você se esqueceu de concatenar: PASSWORD=$CHAR
deve ser
PASSWORD+=$CHAR
ou
PASSWORD=${PASSWORD}${CHAR}
Com essas correções, o código faz o que eu acho que deve: Apresentar um prompt de senha 'estrelado'.
A pedido, aqui, o trecho de código completo e corrigidounset PASSWORD
unset CHARCOUNT
echo
echo -n "Please Enter a Password For VqAdmin, Roundcube and QmailAdmin.
Password: "
stty echo
CHARCOUNT=0
while IFS= read -p "$PROMPT" -r -s -n1 CHAR
do
#Enter - accept password
if [[ $CHAR == $'read -p "$PROMPT" -r -s -n1 CHAR
' ]] ; then
break
fi
#Backspace
if [[ $CHAR == $'7' ]] ; 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
A julgar pelo seu comentário, você não escreveu este código sozinho (completamente) (?) e tem algum problema em entendê-lo. Não vou explicar para você, linha por linha, o que faz. Desculpa. Eu sugiro que você leia em toda a web e volte com perguntas específicas, caso elas apareçam. Uma boa explicação de read
e suas opções é, por exemplo, dada aqui .
Introdução geral à programação bash pode ser encontrada, por exemplo, em