如何有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!
我将大部分参数存储在ENV
variables中,以便容器启动后可以轻松读取它们。 或者甚至更好,他们可以是ARG
。 我的问题是我如何使安装脚本读取ENV
variables的值?
我知道这里有很多答案,但其中大部分答案都是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,如果你喜欢。
希望这可以帮助!
- 在与–link链接的Docker容器中访问环境variables
- Docker将一个variables传递给运行git clone的shell脚本
- 将docker-compose环境传递给symfonyconfiguration
- 在Docker中保留Symfony2应用程序开发的环境variables值
- 如何从Cron作业访问Docker设置环境variables
- 将envvariables传递给DOCKER Spring Boot
- Dockerregistry:2.0覆盖configuration选项
- Docker组合共享环境variables
- 在容器中设置ENVvariables不工作,是否在容器运行时执行“/ usr / local / bin”下的每一个?