如果你使用的是vagrant up
配置器,那么在调用Ruby时传递环境变量看起来很简单:
VAR=123 vagrant up
在Vagrantfile中:
ENV['VAR']
如何使用:shell
provisioner执行此操作?简单地这么做似乎行不通:
$VAR
发布于 2013-10-29 09:43:30
这不是很理想,但我现在可以这样做了:
config.vm.provision "shell" do |s|
s.inline = "VAR1 is $1 and VAR2 is $2"
s.args = "#{ENV['VAR1']} #{ENV['VAR2']}"
end
发布于 2014-06-12 04:35:43
我为基于CentOS的配置带来了这个解决方案:将我需要的所有环境变量放在/etc/profile.d/vagrant.sh
文件中,然后可以在任何配置脚本中访问它。
简而言之:
$before_script = <<SCRIPT
echo # vagrant profile script > /etc/profile.d/vagrant.sh
echo export ENV_VAR1=foo.com/bar >> /etc/profile.d/vagrant.sh
echo export ENV_VAR2=bar.com/foo >> /etc/profile.d/vagrant.sh
chmod +x /etc/profile.d/vagrant.sh
SCRIPT
$after_script = <<SCRIPT
rm -rf /etc/profile.d/vagrant.sh
SCRIPT
config.vm.provision "shell", inline: $before_script
config.vm.provision "shell", path: "build.sh"
config.vm.provision "shell", inline: $after_script
在https://gist.github.com/bivas/6192d6e422f8ff87c29d上可以找到完整的Vagrantfile
发布于 2015-05-20 21:50:46
您可以在内联脚本中使用#{ENV['VAR']}
,例如:
config.vm.provision "shell", inline: <<-END
...
# Install my dotfiles are there. If you're in a hurry you can do
# SKIP_DOTFILES=1 vagrant up
if ! [ -d /home/vagrant/dotfiles ] && [ -z '#{ENV['SKIP_DOTFILES']}']; then
if ! [ -x /usr/bin/git ]; then
DEBIAN_FRONTEND=noninteractive apt-get install -y git
fi
su - vagrant -c 'git clone https://github.com/mgedmin/dotfiles'
su - vagrant -c 'dotfiles/install.sh'
fi
...
END
示例取自工作的Vagrantfile。
这有一些缺点:如果$VAR包含单引号,事情就会中断。
https://stackoverflow.com/questions/19648088
复制相似问题