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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将变量传递给vagrant中的shell脚本配置器相关的知识,希望对你有一定的参考价值。

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

但是无法找到一种方法来将传入的命令行参数传递给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文档可以在这里找到:http://docs.vagrantup.com/v2/provisioning/shell.html

另一答案

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

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
另一答案

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

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"
另一答案

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

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

- @ user1391445

另一答案

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

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

以上是关于将变量传递给vagrant中的shell脚本配置器的主要内容,如果未能解决你的问题,请参考以下文章

如何将 shell 脚本中的结果传递给 Job 中的变量

是否可以将脚本传递给shell变量中的awk?

将 $@ 传递给 shell 脚本中的函数

如何在传递 ShellCheck 时通过环境变量将 glob 传递给 shell 脚本

linux shell脚本,怎样变量传递执行结果

如何在 Makefile 规则中将 env 变量传递给 shell 脚本