2008-09-25 16 views
35

Używam Ruby i MySQL na pudełku Windows.Jak mogę odczytać hasło z wiersza poleceń w Ruby?

Mam trochę kodu Ruby, który musi połączyć się z bazą danych MySQL, a wykonać zaznaczenie. Aby połączyć się z bazą danych, muszę podać hasło między innymi.

Kod Ruby może wyświetlać monit o podanie hasła, użytkownik wpisuje hasło i naciska klawisz Enter. Potrzebuję hasła, które zostanie wpisane jako linia gwiazdek.

Jak mogę ustawić, aby Ruby wyświetlała wpisane hasło jako linię gwiazdek w polu "dos"?

Odpowiedz

50

Aby odpowiedzieć na moje własne pytanie, a z korzyścią dla każdego, kto chciałby wiedzieć, istnieje gem Ruby o nazwie HighLine że trzeba.

require 'rubygems' 
require 'highline/import' 

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

thePassword = get_password() 
+0

highline nie zadziałałby dla mnie, nadal odbijało hasło. Myślę, że miało to coś wspólnego z instalowaniem termias, ale nadal nie działało po zainstalowaniu ruby-termios. Zamiast tego użyłem ruby-hasła. – user2063200

24

biedaka rozwiązanie:

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

lub używając http://raa.ruby-lang.org/project/ruby-password/

Adresatami tej biblioteki jest administratorów systemów, którzy muszą pisać programy Ruby Pytaj o, tworzenia, weryfikacji i szyfrowania haseł.

Edit: Ups nie udało mi się zauważyć, że trzeba to dla Windows :(

+0

Próbowałem to w połączeniu z readline i mogłem nadal widzę hasło – Besi

+1

password = STDIN.noecho (&: gets) .chomp; # <- to też powinno działać (prawdopodobnie nie dla Windows). – jonS90

12

Według doc Highline, to wydaje się działać. Nie wiem, czy to będzie działać w systemie 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 = "*" } 

Oto wyjście na konsoli:

$ ruby highline.rb 
Enter your username: doug 
Enter your password: ****** 
+1

Jeśli używasz skryptu z poleceniem 'ruby', nie potrzebujesz' #!/Usr/local/bin/ruby', jeśli uruchamiasz skrypt bezpośrednio, z './Highline.rb', ty byś. –

+3

Pozwolę sobie dodać, że zwykle #!/Usr/bin/env ruby ​​jest lepszy jako pierwsza linia, ponieważ znajduje instalację ruby ​​niezależnie od tego, gdzie jest. – user132837

3

następujące prace (lobin.rb) w Ruby nie jruby

require 'highline/import' 

$userid = ask("Enter your username: ") { |q| q.echo = true } 
$passwd = ask("Enter your password: ") { |q| q.echo = "*" } 

Wyjście z konsoli:

E:\Tools>ruby login.rb 
Enter your username: username 
Enter your password: ******** 

howerver jeśli biegnę w jruby nie działa i nie daje możliwości wpisania hasła.

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

Klejnot fancy_gets ma nic haseł, który działa dobrze z jruby:

https://github.com/lorint/fancy_gets

kod kończy się tak:

require 'fancy_gets' 
include FancyGets 

puts "Password:" 
pwd = gets_password 
# ... 
Powiązane problemy