にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

コマンドラインからのパスワード入力機能をつける

ソーシャルブックマークに投稿するスクリプトの動作テストをするときに、
いくらテスト目的とは言え、コード内に直接パスワードを記述するのは嫌ですよね。
(特に近くに人がいる場合)
そんなとき、パスワードだけ実行時に入力するようにすればその悩みもちょっと解決。
最初は、

print 'password: '
password = $stdin.gets.chop

としていたのですが、これだと実行時に、

$ ruby hoge.rb
password: (ここに打った内容が表示されてしまう)

なので、パスワードをタイプしている間はコンソールに表示されないようにしたい。
ということで少し調べてみるとMLに以下のような投稿が。

:rubyでパスワードをユーザから受け取りたいとき
:にそのテキスト(文字列)を表示させないようにする
:ことはできるのでしょうか?

簡単なのは
system "stty -echo"
password = $stdin.gets.chop
system "stty echo"
です. ioctl を使うのは移植性の問題もあるし.

ということで、以下のように読み取り行を挟んでやると無事解決。お疲れ様でした。

print 'password: '
system "stty -echo"
password = $stdin.gets.chop
system "stty echo"