2017-04-09 75 views
0

我正在嘗試使用名爲PHPCI的工具來構建Docker鏡像。我幾乎能夠做所有事情,但是當我需要運行設置腳本來創建數據庫,設置用戶名/密碼併爲工具本身執行某種默認配置時,我的第一個問題就出現了。如何讓bash腳本回答交互式提示(僅限y/n)?

腳本應該被稱爲(see here - 從作曲安裝):

php ./console phpci:install 

,它會開始問一些問題。這是被問什麼是完整的例子:

****************** 
Welcome to PHPCI 
****************** 

Checking requirements... OK 

Please answer the following questions: 
------------------------------------- 

Please enter your MySQL host [localhost]: 
Please enter your MySQL database name [phpci]: 
Please enter your MySQL username [phpci]: 
Please enter your MySQL password: 
Your PHPCI URL ("http://phpci.local" for example): http://phpci.localdomain 
Use beanstalkd to manage build queue? <yes|no> 
Skipping beanstalkd configuration. 
Setting up your database... OK 
Admin Email: <email> 
Admin Name: <user_name> 
Admin Password: 
User account created! 

我最存儲這些參數的ENV變量,這樣我可以在容器開始後容易閱讀。或者甚至更好,他們可以是ARG。我的問題是我如何讓安裝腳本讀取ENV變量的值?

我知道這裏有很多答案,但其中大部分都是針對yes|no問題,這些問題似乎很容易,但對於這個問題我找不到任何有用的幫助。任何幫助都比歡迎。

+1

除了heredoc或'expect'? –

+0

@ IgnacioVazquez-Abrams你在說[this](http://expect.sourceforge.net/)? – ReynierPM

+0

這將是一個。 –

回答

2

考慮這兩個測試腳本:

tmp() 
{ 
    var=fred 
    tmp2 << EOD 
$var 
EOD 
} 

tmp2() 
{ 
    read var2 
    echo $var2 
} 

如果粘貼這些爲殼,然後運行tmp,你會得到這樣的:

> tmp 
fred 

的「定界符」語法,您可以包括在程序之後對腳本中的提示作出響應。所以你想要做的是

php ./console phpci:install <<EOD 
$HOST 
$DATABASE 
$USERNAME 
$PASSWORD 
[ ... etc ... ] 
EOD 

這應該爲你做。請注意,您也可以包含硬編碼值(而不是變量)。

如果您願意,您可以閱讀更多關於heredoc at Wikipedia的信息。

希望這會有所幫助!