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

use*_*445 25 provisioning parameter-passing vagrant

我使用的是简单的shell脚本,以提供软件作为游民设置为可见这里.

但是无法找到一种方法来将传入的命令行参数传递给vagrant并将它们发送到外部shell脚本.谷歌透露这是作为一个功能添加,但我找不到任何涵盖它的文档或示例.

Joh*_*ann 27

你说的没错.传递参数的方法是使用:args参数.

config.vm.provision :shell, :path => "bootstrap.sh", :args => "'first arg' second"
Run Code Online (Sandbox Code Playgroud)

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

$ bootstrap.sh 'first arg' second
Run Code Online (Sandbox Code Playgroud)

脚本$ 1中的字符串"first arg",$ 2表示字符串"second".

关于此的v2文档可以在这里找到:http://docs.vagrantup.com/v2/provisioning/shell.html


Iva*_*van 8

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

var1= "192.168.50.4"
var2 = "my_server"
config.vm.provision :shell, :path => 'setup.sh', :args => [var1, var2]
Run Code Online (Sandbox Code Playgroud)

然后,在shell setup.sh中:

echo "### $1 - $2"

> ### 192.168.50.4 - my_server
Run Code Online (Sandbox Code Playgroud)


ken*_*orb 5

这是从环境中传递变量的替代方法:

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
Run Code Online (Sandbox Code Playgroud)

用法示例:

TRACE=1 VERBOSE=1 vagrant up
Run Code Online (Sandbox Code Playgroud)