我如何从Ruby的命令行读取密码?
我在Windows上运行Ruby和MySQL。
我有一些Ruby代码需要连接到MySQL数据库执行select。 要连接到数据库,我需要提供其他的密码。
Ruby代码可以显示请求密码的提示,用户input密码并点击Enter键。 我需要的是密码,因为它是键入,显示为一行星号。
我怎样才能让Ruby在“dos框”中显示input的密码作为一行星号?
为了回答我自己的问题,并为了其他人想知道的好处,有一个名为HighLine的Rubygem,你需要。
require 'rubygems' require 'highline/import' def get_password(prompt="Enter Password") ask(prompt) {|q| q.echo = false} end thePassword = get_password()
穷人的解决scheme:
system "stty -echo" # read password system "stty echo"
或者使用http://raa.ruby-lang.org/project/ruby-password/
这个库的目标受众是需要编写提示,生成,validation和encryption密码的Ruby程序的系统pipe理员。
编辑:哎呀我没有注意到你需要这个Windows的:(
根据Highline doc,这似乎工作。 不知道它是否会在Windows上工作。
#!/usr/local/bin/ruby require 'rubygems' require 'highline/import' username = ask("Enter your username: ") { |q| q.echo = true } password = ask("Enter your password: ") { |q| q.echo = "*" }
这是控制台上的输出:
$ ruby highline.rb Enter your username: doug Enter your password: ******
下面的作品(lobin.rb)在ruby中不是jruby
require 'highline/import' $userid = ask("Enter your username: ") { |q| q.echo = true } $passwd = ask("Enter your password: ") { |q| q.echo = "*" }
控制台输出:
E:\Tools>ruby login.rb Enter your username: username Enter your password: ********
如果我在jruby中运行,它会失败,并没有机会input您的密码。
E:\Tools>jruby login.rb Enter your username: username Enter your password:
该fancy_gets gem有一个密码的东西,与jruby工作正常:
https://github.com/lorint/fancy_gets
代码结束如下:
require 'fancy_gets' include FancyGets puts "Password:" pwd = gets_password # ...