シェル上でパスワードを入力させたいときなど、エコーバックさせたくない場面があります。
このようなときは、
print 'Username: ' username = $stdin.readline.chomp print 'Password: ' system 'stty -echo > /dev/null 2>&1' password = $stdin.readline.chomp system 'stty echo > /dev/null 2>&1' puts
とやってもいいのですが、bash でパスワード入力中に C-d を押すと例外が発生して終了し、さらにエコーバックされないままになってしまいます。
このようなときは highline を使うのが簡単です。
sudo gem install highline
cd (highline インストール先)
sudo ruby setup.rb
なぜかうちの環境では、setup.rb を実行しないと、うまく動きませんでした。
highline を使用した実装例。
require 'highline' HighLine.track_eof = false ui = HighLine.new username = ui.ask('Username: ') password = ui.ask('Password: ') { |q| q.echo = false }
track_eof = false はなくても動くかもしれません。
ちゃんと調べていないのですが、特定の環境でのエラー回避策っぽいです。
Capistrano での highline 使用部分では track_eof = false となっています。
(このへんが参考になるのかも: http://www.mail-archive.com/capistrano@googlegroups.com/msg01756.html)
よいお年をお迎えください。