将变量传递给vagrant中的shell脚本配置器

时间:2013-03-17 14:32:36

标签: vagrant parameter-passing provisioning

我正在使用一个简单的shell脚本为流浪汉设置配置软件,如here所示。

但是无法弄清楚如何将传入的命令行参数传递给vagrant并将它们发送到外部shell脚本。 Google透露,这是作为一项功能添加的,但我找不到任何涵盖它的文档或示例。

6 个答案:

答案 0 :(得分:27)

你是对的。传递参数的方法是使用:args参数。

config.vm.provision :shell, :path => "bootstrap.sh", :args => "'first arg' second"

请注意,仅当您希望在传递的参数中包含空格时,才需要first arg周围的单引号。也就是说,上面的代码相当于在终端中输入以下内容:

$ bootstrap.sh 'first arg' second

脚本$ 1中的字符串表示“first arg”,$ 2表示字符串“second”。

有关此问题的v2文档可在此处找到:http://docs.vagrantup.com/v2/provisioning/shell.html

答案 1 :(得分:8)

确实,它不适用于变量! 正确的snytax是:

var1= "192.168.50.4"
var2 = "my_server"
config.vm.provision :shell, :path => 'setup.sh', :args => [var1, var2]

然后,在shell setup.sh中:

echo "### $1 - $2"

> ### 192.168.50.4 - my_server

答案 2 :(得分:2)

以下是从环境传递变量的另一种方法:

config.vm.provision "shell" do |s|
    s.binary = true # Replace Windows line endings with Unix line endings.
    s.inline = %Q(/usr/bin/env    \
      TRACE=#{ENV['TRACE']}       \
      VERBOSE=#{ENV['VERBOSE']}   \
      FORCE=#{ENV['FORCE']}       \
      bash my_script.sh)
end

使用示例:

TRACE=1 VERBOSE=1 vagrant up

答案 3 :(得分:2)

为了添加显式参数,我成功地使用了它:

axios.post('http://connect.stellar-ir.com/api/companies', searchData).then(response => {
  if(response.status === 200)
    {
      this.serverData = response.data.model.data
    }
}).catch(error => {
    console.log(error)
});

答案 4 :(得分:1)

根据我在旧版docs page中找到的一些信息回答我自己的问题:

config.vm.provision :shell, :path => "bootstrap.sh", :args => "'abc'"

- @ user1391445

答案 5 :(得分:0)

在新版本中,您可以使用数组:

config.vm.provision :shell, :path => "bootstrap.sh", :args:["first", "second"]