2011-07-26 30 views
4

私は、heroku createなどいくつかのHerokuクライアントコマンドを使用してBashスクリプトを作成しました。これらのコマンドはRubyで書かれており、include callsからIO::getsにユーザーの名前とパスワードを収集します。しかし、彼らがBashスクリプトの中から呼び出された場合、それは最後の取得に進むようです。例えば、Herokuのクライアントは、メールアドレスとパスワードを求めるために起こっている場合には、最初はスキップされ、ユーザーが自分のパスワードのみを入力することができます:Rubyを呼び出すBashスクリプトの入力を待つ

Enter your Heroku credentials. 
Email: Password: _ 

は修正する方法や陪審-リグありますこれが起こらないようにするためのBashスクリプト(コマンドラインから全く同じコマンドを手で実行しても起こりません)またはRubyで変更する必要があるものはありますか?

[UPDATE - ソリューション]

私は、上記の問題を解決することができませんでしたが、別の質問へ@geekosaur's answerは、Rubyスクリプトが内部の実行中に端末が「利用可能」作りに右のトラックに私を置きますバッシュ。私はすべての変更:

curl -s http://example.com/bash.sh | bash 

bash < <(curl -s http://example.com/bash.sh) 

を制御する端末機器/dev/ttystdinを再開するようにしてください

bash <(curl -s http://example.com/bash.sh) 
+0

私はこの同じ問題を抱えています – noli

答えて

2

します。

exec 0</dev/tty # Bash 

$stdin.reopen(File.open("/dev/tty", "r")) # Ruby 

# Bash examples 
: | (read var; echo $var;) 
: | (read var </dev/tty; echo $var;) 
: | (exec 0</dev/tty; read var; echo $var;) 
+0

"reopen"?これが何を意味するのか、なぜそれを行う必要があるのか​​説明できますか?ありがとう – noli

+0

私はこれがうまくいくと思っています。なぜなら問題は読み終わる端末/標準がないからです。しかし、この解決策では、何らかの形で標準入力を試みるためにRubyを変更する必要があるため(*端末がない場合はおそらく不可能かもしれません)、非常に柔軟性がありません。代わりに、私は根本的な原因に対処しました。これは端末を持っていませんでした。私のQへの更新を見てください。 –

関連する問題