Как я могу прочитать пароль из командной строки в Ruby?

Я запускаю Ruby и MySQL в окне Windows.

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

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

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

Ответ 1

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

require 'rubygems'
require 'highline/import'

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

thePassword = get_password()

Ответ 2

Бедственное решение:

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

Или используя http://raa.ruby-lang.org/project/ruby-password/

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

Изменить:. Я не заметил, что это необходимо для Windows: (

Ответ 3

Согласно документу 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:  ******

Ответ 4

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

Ответ 5

В fancy_gets gem есть парольная вещь, которая отлично работает с jruby:

https://github.com/lorint/fancy_gets

Код заканчивается следующим образом:

require 'fancy_gets'
include FancyGets

puts "Password:"
pwd = gets_password
# ...