我正在尝试使用名为 PHPCI 的工具构建 Docker 镜像.我几乎可以做所有事情,但当我需要运行设置脚本来创建数据库、设置用户名/密码并为工具本身做某种默认配置时,我的第一个问题出现了。
该脚本应调用为(see here - 从 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!
我将这些参数中的大部分存储在 ENV
变量中,这样我就可以在容器启动后轻松读取它们。或者更好的是,它们可以是 ARG
。我的问题是如何让安装脚本从 ENV
变量中读取值?
我知道那里有很多答案,但其中大部分都是关于yes|no
的问题,这些问题看起来很简单,但我找不到任何关于这个问题的有用信息。我们非常欢迎任何帮助。
最佳答案
考虑这两个测试脚本:
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
这应该适合你。请注意,您也可以包含硬编码值(而不是变量)。
您可以阅读更多关于 heredoc at Wikipedia 的信息如果你愿意。
希望这对您有所帮助!
关于linux - 如何让 bash 脚本回答交互式提示(仅无 y/n)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43313177/