Unix风格的密码readline
问题描述:
我知道如何从STDIN中读取一个字符串(如下所述),但我的问题是这些字符显示在屏幕上。如何让字符串像Unix/Linux密码提示一样隐藏?Unix风格的密码readline
print "Password: "
pass = gets.as(String).strip
答
标准库目前没有为此提供方法。一个快速的解决方法是结合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)
接口应该被使用。我在水晶版本0.19.0打开这个pull request,所以希望以后你就可以:
print "Enter password: "
password = STDIN.noecho &.gets.try &.chomp
puts
而直到0.19.0您可以重新打开IO,并添加代码,所以你可以使用它的权利离开:-) – asterite