2008-09-25 3 views
35

Я запускаю Ruby и MySQL в окне Windows.Как я могу прочитать пароль из командной строки в Ruby?

У меня есть код Ruby, которому необходимо подключиться к базе данных MySQL, выполнить выбор. Чтобы подключиться к базе данных, мне нужно указать пароль среди прочего.

Код Ruby может отображать запрос с запросом пароля, пользователь вводит пароль и нажимает клавишу Enter. Мне нужно, чтобы пароль, как он напечатан, отображался как строка звездочек.

Как я могу заставить Ruby отображать введенный пароль как строку звездочек в поле «dos»?

ответ

50

Чтобы ответить на мой собственный вопрос, и в пользу кого-то, кто хотел бы знать, есть рубин драгоценный камень называется HighLine, что вам нужно.

require 'rubygems' 
require 'highline/import' 

def get_password(prompt="Enter Password") 
    ask(prompt) {|q| q.echo = false} 
end 

thePassword = get_password() 
+0

highline не будет работать для меня, он все равно повторяет пароль. Я думаю, что это связано с тем, что termios не устанавливается, но после установки ruby-termios он все равно не работает. Вместо этого я использовал ruby-password. – user2063200 2013-02-12 01:00:59

24

решение бедняка:

system "stty -echo" 
# read password 
system "stty echo" 

Или с помощью http://raa.ruby-lang.org/project/ruby-password/

Целевой аудиторией для этой библиотеки является системными администраторами, которым нужно писать программы на Ruby, побуждающие для, генерировать, проверку и шифрование паролей.

Edit: Упс я не заметил, что вам это нужно для Windows, :(

+0

Я попробовал это в сочетании с Readline, и я мог по-прежнему см. пароль – Besi 2012-08-18 08:06:02

+1

пароль = STDIN.noecho (&: получает) .chomp; # <- это тоже должно работать (возможно, не для окон) – jonS90 2014-03-08 21:41:29

12

Согласно документу Highline, это, кажется, работает. Не уверен, что если она будет работать на 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: ****** 
3

следующие работы (lobin.rb) в рубине не 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: ******** 

Howerver если я бегу в jruby он терпит неудачу и не дает возможности ввести ваш пароль.

E:\Tools>jruby login.rb 
Enter your username: username 
Enter your password: 
0

fancy_gets камень имеет пароль вещь, которая прекрасно работает с JRuby:

https://github.com/lorint/fancy_gets

код заканчивается как:

require 'fancy_gets' 
include FancyGets 

puts "Password:" 
pwd = gets_password 
# ... 
Смежные вопросы