使用Vagrant,是否可以将来自vagrant up {args}
的args传递到配置文件中?
我希望人们能够传入他们的github帐户名,以便我可以将其传递给配置文件 - 例如:
vagrant up iwayneo
然后将和iwayneo
传递给配置文件 - 这可能吗?
如果我在vagrant up
之前运行的sh脚本中执行以下操作:
echo "Please enter the local username - for vagrant boxes enter vagrant:"
read uname
export LOCALUSER=$uname
echo " " >> ~/.bashrc
echo "LOCALUSER=$uname" >> ~/.bashrc
echo "Please enter the bitbucket username:"
read bbuname
export BITBUCKETUSER=$bbuname
echo " " >> ~/.bashrc
echo "BITBUCKETUSER=$bbuname" >> ~/.bashrc
echo "Please enter bitbucket password:"
read bbpass
export BITBUCKETPASS=$bbpass
echo " " >> ~/.bashrc
echo "BITBUCKETPASS=$bbpass" >> ~/.bashrc
echo "configured for local username $uname, bitbucket username $bbuname and bitbucket pass $bbpass"
source ~/.bashrc
接下来在我的流浪文件中:
puts "Current user is #{ENV['LOCALUSER']}"
if !ENV.has_key?("LOCALUSER")
raise "Please specify the `LOCALUSER` environment variable - you can do this by running config.sh"
end
if !ENV.has_key?("BITBUCKETUSER")
raise "Please specify the `BITBUCKETUSER` environment variable - you can do this by running config.sh"
end
if !ENV.has_key?("BITBUCKETPASS")
raise "Please specify the `BITBUCKETPASS` environment variable - you can do this by running config.sh"
end
调用LOCALUSER加注,puts "Current user is #{ENV['LOCALUSER']}"
收取Current user is
,因此绝对不会。
AHAAAA - 我必须使用一种班轮格式吗?有没有办法不使用那种格式?
指出答案是正确的,但任何帮助都会非常感激
答案 0 :(得分:1)
执行此类操作的最常见方法是使用环境变量。例如:
ACCOUNT=iwayneo vagrant provision
然后,您可以使用the ENV class在Vagrantfile中使用它。假设您想将其作为参数传递给shell provisioner脚本,您可以使用以下内容:
if !ENV.has_key?("ACCOUNT")
raise "Please specify the `ACCOUNT` environment variable"
end
Vagrant.configure("2") do |config|
config.vm.provision "shell", path: "script.sh", args: ENV["ACCOUNT"]
end
编辑:添加sh脚本设置:
你必须source
你的sh脚本让变量在shell会话中生效。否则,它们仅在该子shell的脚本运行期间可用。同样,您还需要{。1}} .bashrc中的变量,以便它们在Vagrant过程中可用。
所有这些都与shell和子进程如何使用环境变量有关。 Vagrant没什么特别的。