如何有bash脚本回答交互式提示(没有y / n只)?

我正在尝试使用名为PHPCI的工具来构build一个Docker镜像。 我几乎能够做所有事情,但是当我需要运行创build数据库的设置脚本,设置用户名/密码,以及为工具本身进行某种默认configuration时,出现了第一个问题。

该脚本应该被称为( 见这里 – 从Composer安装):

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! 

我将大部分参数存储在ENVvariables中,以便容器启动后可以轻松读取它们。 或者甚至更好,他们可以是ARG 。 我的问题是我如何使安装脚本读取ENVvariables的值?

我知道这里有很多答案,但其中大部分答案都是yes|no问题,这似乎很容易,但是我找不到任何对此有帮助的问题。 任何帮助都比欢迎。

考虑这两个testing脚本:

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

如果你把它们粘贴到一个shell中,然后运行tmp ,你会得到这个:

 > tmp fred 

程序之后,“heredoc”语法可让您在脚本中包含对提示的响应。 所以你想要做的是

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

这应该为你做。 请注意,您也可以包含硬编码值(而不是variables)。

你可以阅读更多关于维基百科的heredoc,如果你喜欢。

希望这可以帮助!