我如何从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 # ...