read -s
desativa o terminal echo
apenas para a duração desse comando read
. Então, se você digitar algo entre dois comandos read
, o driver do terminal irá echo
de volta.
Você deve desabilitar echo
e, em seguida, chamar read
em seu loop sem -s
:
if [ -t 0 ]; then
saved=$(stty -g)
stty -echo
fi
while read -rN1; do
...
done
if [ -t 0 ]; then
stty "$saved"
fi