linux - 如何让 bash 脚本回答交互式提示(仅无 y/n)?

标签 linux bash shell docker environment-variables

我正在尝试使用名为 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/

相关文章:

bash - 无法将变量从 Jenkins 中的执行 shell 导出到其他项目(使用属性文件)

linux - CentOS 6.3 上 SFTP 目录中的 .bashrc、.bash_profile 和 .bash_logout 文件

json - bash shell 脚本出现问题,尝试使用 cURL 发布变量 JSON 数据

文本上的 Bash 简单模式提取器

linux - bash:如何从文件或数组构造带引号的参数

bash - 列出高于特定数字的数字文件

linux - 如何使用grep/awk对多行进行聚合平均?

linux - 我应该将数据库和 CMS 文件放在单独的 EBS 或 S3 上吗?

linux - 如何在 initramfs 构建的 yocto 配方中启用 udev 包

security - 如何将变量的值传递给命令的标准输入?