Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Heroku 如何与流浪的shell配置脚本交互?_Heroku_Vagrant - Fatal编程技术网

Heroku 如何与流浪的shell配置脚本交互?

Heroku 如何与流浪的shell配置脚本交互?,heroku,vagrant,Heroku,Vagrant,我有一个shell配置脚本,它调用一个需要用户输入的命令,但是当我运行vagrant provision时,该进程在脚本中的该点挂起,因为命令正在等待我的输入,但没有地方可以提供它。有没有办法解决这个问题,比如强制脚本以某种交互模式运行 具体来说,我创建了一个干净的Ubuntu VM,然后调用Heroku CLI下载数据库备份(这在我的配置脚本中): 但是,由于这是一个干净的VM,因此这是我第一次运行Heroku CLI命令,系统会提示我输入登录凭据。因为脚本是由Vagrant管理的,所以没有附

我有一个shell配置脚本,它调用一个需要用户输入的命令,但是当我运行
vagrant provision
时,该进程在脚本中的该点挂起,因为命令正在等待我的输入,但没有地方可以提供它。有没有办法解决这个问题,比如强制脚本以某种交互模式运行

具体来说,我创建了一个干净的Ubuntu VM,然后调用Heroku CLI下载数据库备份(这在我的配置脚本中):


但是,由于这是一个干净的VM,因此这是我第一次运行Heroku CLI命令,系统会提示我输入登录凭据。因为脚本是由Vagrant管理的,所以没有附加交互shell,所以脚本就挂在那里。

我假设您不想用纯文本硬编码您的凭据,从而尝试强制使用交互模式。 事情和你一样,我在vagrant provision doc()中没有看到这样的选项,所以你需要在脚本中嵌入身份验证。 您是否考虑过使用诸如获取令牌和使用heroku REST Api而不是CLI之类的东西?

如果要将临时输入或变量传递给Vagrant脚本,可以让它们作为该命令的临时环境变量输入凭据,方法是将它们放在同一行的第一行:

username=x password=x vagrant provision
并从Vagrant文件中访问它们

$u = ENV['username']
$p = ENV['password']
然后可以将它们作为参数传递给bash脚本:

config.vm.provision "shell" do |s|
    s.inline: "echo username: $1, password: $2"
    s.args: [$u, $p]
end

您可以在vm中安装类似expect的东西来处理将这些变量传递给curl命令的问题。

您说得对-我正在为一组开发人员构建一个通用框,他们都需要提供自己的凭据。我已经解决了这个问题。@JoeBlock您可以使用一个配置文件来解决这个问题,用户可以预先输入数据,并期望:您的解决方案是什么?
config.vm.provision "shell" do |s|
    s.inline: "echo username: $1, password: $2"
    s.args: [$u, $p]
end