将命令行参数传递给 vagrant shell 脚本配置器
Pass command line argument to vagrant shell script provisioner
类似于这个问题:Passing variable to a shell script provisioner in vagrant
我想将变量传递给 shell 脚本供应器,但我想在调用供应器时在命令行上设置这些变量。这可能吗?
这就是我要尝试的 - 我想有一些可能性,因为 Vagrantfile 是一个 ruby 脚本,你可以使用大部分 ruby 可能性
小心,因为 vagrant 可能需要检查变量,例如在执行 vagrant up arg1 arg2
时,它期望 arg1 和 arg2 是 Vagrantfile 中定义的机器名称,并且会因为找不到它而引发错误
所以你需要像这样传递这些变量
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 "
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
在您的 Vagrantfile 中,添加以下内容 -
{
"PROVISION_PARAMS" => "some_default_values",
}.each { |key, value| ENV[key] = value if ENV[key] == nil }
现在可以通过以下方式将这些参数传递给 shell 脚本供应器 -
config.vm.provision :shell, privileged: true, run: "always",
:path => "../../scripts/script.ps1",
:args => ENV['PROVISION_PARAMS']
您现在可以通过以下方式向该脚本提供命令行参数 -
$ PROVISION_PARAMS=' param1 param2 "param 3" ' vagrant provision
如果不指定这些参数,脚本将采用默认值。
类似于这个问题:Passing variable to a shell script provisioner in vagrant
我想将变量传递给 shell 脚本供应器,但我想在调用供应器时在命令行上设置这些变量。这可能吗?
这就是我要尝试的 - 我想有一些可能性,因为 Vagrantfile 是一个 ruby 脚本,你可以使用大部分 ruby 可能性
小心,因为 vagrant 可能需要检查变量,例如在执行 vagrant up arg1 arg2
时,它期望 arg1 和 arg2 是 Vagrantfile 中定义的机器名称,并且会因为找不到它而引发错误
所以你需要像这样传递这些变量
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 "
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
在您的 Vagrantfile 中,添加以下内容 -
{
"PROVISION_PARAMS" => "some_default_values",
}.each { |key, value| ENV[key] = value if ENV[key] == nil }
现在可以通过以下方式将这些参数传递给 shell 脚本供应器 -
config.vm.provision :shell, privileged: true, run: "always",
:path => "../../scripts/script.ps1",
:args => ENV['PROVISION_PARAMS']
您现在可以通过以下方式向该脚本提供命令行参数 -
$ PROVISION_PARAMS=' param1 param2 "param 3" ' vagrant provision
如果不指定这些参数,脚本将采用默认值。