Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Ruby 将命令行参数传递给vagrant shell脚本供应器_Ruby_Shell_Vagrant_Provisioning - Fatal编程技术网

Ruby 将命令行参数传递给vagrant shell脚本供应器

Ruby 将命令行参数传递给vagrant shell脚本供应器,ruby,shell,vagrant,provisioning,Ruby,Shell,Vagrant,Provisioning,与这个问题类似: 我想将变量传递给shell脚本provisioner,但我想在调用provisioner时在命令行上设置这些变量。这是可能的吗?这就是我要尝试的-我想有一些可能性,因为VagarntFile是一个ruby脚本,您可以使用大多数ruby可能性 但是要小心,因为vagrant可能需要检查变量,例如,在执行vagrant up arg1 arg2时,它希望arg1和arg2是vagrant文件中定义的机器名,并且会因为找不到而引发错误 所以你需要像这样传递这些变量 vagrant -

与这个问题类似:


我想将变量传递给shell脚本provisioner,但我想在调用provisioner时在命令行上设置这些变量。这是可能的吗?

这就是我要尝试的-我想有一些可能性,因为VagarntFile是一个ruby脚本,您可以使用大多数ruby可能性

但是要小心,因为vagrant可能需要检查变量,例如,在执行
vagrant up arg1 arg2
时,它希望arg1和arg2是vagrant文件中定义的机器名,并且会因为找不到而引发错误

所以你需要像这样传递这些变量

vagrant --arg1 --arg2 up
你可以读它们

# -*- mode: ruby -*-
# vi: set ft=ruby :

v1 = ARGV[0]
v2 = ARGV[1]
array_arg = [v1, v2]


Vagrant.configure("2") do |config|

  blabla config

  array_arg.each do |arg|
    config.vm.provision "shell", run: "always" do |s|
      s.inline = "echo $1"
      s.args   = arg
    end
  end
end
例如,执行将给出

fhenri@machine:~/project$ vagrant --arg1 --arg2 up
    . . . . . 
==> default: Running provisioner: shell...
    default: Running: inline script
==> default: stdin: is not a tty
==> default: --arg1
==> default: Running provisioner: shell...
    default: Running: inline script
==> default: stdin: is not a tty
==> default: --arg2

在您的文件中,添加以下内容-

{
    "PROVISION_PARAMS" => "some_default_values",
}.each { |key, value| ENV[key] = value if ENV[key] == nil }
  
这些参数现在可以通过以下方式传递给shell脚本provisioner-

config.vm.provision :shell, privileged: true, run: "always",
                            :path => "../../scripts/script.ps1", 
                            :args => ENV['PROVISION_PARAMS']
现在,您可以通过以下方式向该脚本提供命令行参数-

$ PROVISION_PARAMS=' param1 param2 "param 3" ' vagrant provision

如果未指定这些参数,脚本将采用默认值。

因此,您想执行类似于
vagrant up arg1 arg2
的操作,并将arg1和arg2发送给provisioner?我想调用
vagrant provision--arg1
,这样它就不会运行
vagrant up
,而是运行
vagrant provision
(如果机器已启动但需要重新设置)如果您想拥有自己的变量,那么就应该在
vagrant
命令之后拥有它,如果您将它放在vagrant命令之后,就像provision命令一样,vagrant会期望它是自己命令的一个参数,并会声明有错误。如果您运行
vagrant--arg1 provision
在这种情况下,它仍然会运行provision命令仅离子