Ign*_*ams 47
来自help read
:
Run Code Online (Sandbox Code Playgroud)-s do not echo input coming from a terminal
Dyl*_*lan 10
我总是习惯stty -echo
关闭回声,然后阅读,然后再做stty echo
(通过查看 man of stty
- ie阅读更多man stty
)。从程序员的角度来看,这更有用,因为您可以关闭回显,然后使用它们的标准 stdin“读取器”从 Java、C(++)、Python 等编程语言中读取密码。
在 bash 中,用法可能如下所示:
echo -n "USERNAME: "; read uname
echo -n "PASSWORD: "; stty -echo; read passwd; stty echo; echo
program $uname $passwd
passwd= # get rid of passwd
Run Code Online (Sandbox Code Playgroud)
例如,Python 看起来像:
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)
Run Code Online (Sandbox Code Playgroud)
我不得不在 Python 中多次这样做,所以从这个角度来看,我非常了解它。不过,这并不难翻译成其他语言。