我理解如何从STDIN读取字符串(如下所示),但我的问题是字符显示在屏幕上。如何像Unix / Linux密码提示一样隐藏字符串?
print "Password: "
pass = gets.as(String).strip
答案 0 :(得分:2)
标准库目前无法解决此问题。一个快速的解决方法是绑定getpass(3)
:
lib LibC
fun getpass(prompt : Char*) : Char*
end
def getpass(prompt : String)
password = LibC.getpass(prompt)
raise Errno.new("getpass") unless password
String.new(password)
end
password = getpass("Enter password: ")
但请注意,glibc不推荐使用此函数,应使用termios(3)
接口。我为此打开了pull request,所以希望在Crystal版本0.19.0或更高版本中你能够:
print "Enter password: "
password = STDIN.noecho &.gets.try &.chomp
puts