De help read
:
-s do not echo input coming from a terminal
Como ler senhas em scripts bash de uma forma como ferramentas que não estão mostrando no terminal?
(Alterar a fonte para preto no preto pode ser complicado, pois é fácil de copiar e colar; portanto, não é uma solução)
Sempre usei stty -echo
para desativar o eco, depois leia e depois faça stty echo
(leia mais visualizando man de stty
- ou seja, man stty
). Isso é mais útil do ponto de vista de programadores, pois você pode desativar o eco e depois ler uma senha de uma linguagem de programação como Java, C (++), Python, etc. com seus "leitores" padrão stdin.
No bash, o uso poderia ser assim:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
O Python, por exemplo, seria parecido com:
from sys import stdout
from os import system as term
uname = raw_input("USERNAME: ") # read input from stdin until [Enter] in 2
stdout.write("PASSWORD: ")
term("stty -echo") # turn echo off
try:
passwd = raw_input()
except KeyboardInterrupt: # ctrl+c pressed
raise SystemExit("Password attempt interrupted")
except EOFError: # ctrl+d pressed
raise SystemExit("Password attempt interrupted")
finally:
term("stty echo") # turn echo on again
print "username:", uname
print "password:", "*" * len(passwd)
Eu tive que fazer isso muitas vezes em Python, então eu sei muito bem dessa perspectiva. Isso não é muito difícil de traduzir para outros idiomas, no entanto.
Sua pergunta é meio diferente "de uma maneira como as ferramentas ???" então não sei exatamente se isso funcionará para você:
system1 $ passwd=abc123
system1 $ printf "%s\n" "${passwd//?/*}"
******