2011-07-26 45 views
4

我有一個Bash腳本,使用一些Heroku客戶端命令,例如,heroku創建。這些命令以Ruby和include callsIO::gets編寫,以收集用戶的名稱和密碼。但是,如果它們是從Bash腳本中調用的,它似乎會推進到最後的獲取。例如,在Heroku的客戶端要問電子郵件和密碼的情況下,第一個被跳過,用戶只能輸入自己的密碼:等待輸入在Bash腳本中調用Ruby得到

Enter your Heroku credentials. 
Email: Password: _ 

有沒有辦法解決或陪審團鑽機Bash腳本來防止這種情況發生(當命令行中手動運行完全相同的命令時,不會發生這種情況)。或者在Ruby中必須更改的東西?

[更新 - 解決方案]

我是不是能夠解決上述問題,但@geekosaur's answer另一個問題使我在正確的軌道上,以使「可用」終端到Ruby腳本內運行Bash。我改變所有:

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

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

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

我遇到同樣的問題 – noli

回答

2

嘗試重新打開該控制終端裝置上/dev/ttystdin

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

「重新打開」?你能解釋一下這意味着什麼,或者爲什麼需要這樣做?謝謝 – noli

+0

我希望這會工作,因爲問題是缺乏一個終端/標準輸入讀取。但是,由於這種解決方案需要改變Ruby試圖以某種方式獲取stdin(如果沒有*終端,甚至可能不可能),它不會很靈活。相反,我解決了沒有終端的根本原因 - 請參閱我對Q.的更新。 –