在vagrant中将变量传递给shell脚本供应器
我使用一个简单的shell脚本为一个流浪设置提供软件,如图所示在vagrant中将变量传递给shell脚本供应器,vagrant,parameter-passing,provisioning,Vagrant,Parameter Passing,Provisioning,我使用一个简单的shell脚本为一个流浪设置提供软件,如图所示 但无法找到一种方法将传递给vagrant的命令行参数发送到外部shell脚本。谷歌透露,这是作为一项功能添加的,但我找不到任何相关文档或示例。你说得对。传递参数的方法是使用:args参数 config.vm.provision :shell, :path => "bootstrap.sh", :args => "'first arg' second" 请注意,first arg周围的单引号仅在希望将空格作为传递的参数的
但无法找到一种方法将传递给vagrant的命令行参数发送到外部shell脚本。谷歌透露,这是作为一项功能添加的,但我找不到任何相关文档或示例。你说得对。传递参数的方法是使用
: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文档:事实上,它不适用于变量! 正确的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
根据我在旧版本中找到的一些信息回答我自己的问题:
--@user1391445以下是从环境中传递变量的替代方法:
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
为了添加显式参数,我成功地使用了以下方法:
config.vm.provision "shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg"
在新版本中,您可以使用阵列:
config.vm.provision:shell,:path=>bootstrap.sh,:args:[“第一”、“第二”]
如果arg是文件中的一个变量,我认为这不起作用。例如:-args:“#{MY_VARIABLE}”和在.sh脚本中:-echo$1是否有一种方法可以传递参数,如vagrant provision--arg1--arg2
?然后访问我们的供应脚本中的那些。我几乎99%肯定答案是否定的,但我还是忍不住要问。
config.vm.provision "shell", path: "provision.sh", :args => "--arg1 somearg --arg2 anotherarg"