我有流浪汉为了开发目的而运行Ubuntu。我已经使用shell脚本配置程序来下载/安装我的依赖项并创建一些别名,但我在使用配置程序创建环境变量(用于我的项目中的几个标志)方面遇到了障碍。最初我有类似的东西:
export MY_VAR='value'
进入我的配置脚本,但后来发现通过正常运行它不能从shell脚本中add environment variables。很公平,所以我试着改变我的Vagrantfile行:
config.vm.provision "shell", inline: “source setup.sh"
哪个没解决问题。环境变量仍然不存在。我尝试直接添加导出作为内联:
config.vm.provision "shell", inline: “export MY_VAR='value'"
没有运气。当我进入ssh时,仍然没有全球环境。有没有办法使用shell脚本来设置bash环境变量,还是时候在shell shell配置器上学习并学习厨师?
答案 0 :(得分:32)
您应该让配置脚本为.profile添加一行:
echo "export VAR=value" >> ~/.profile
登录时,bpr将读取.profile脚本,并设置变量。
答案 1 :(得分:17)
每次运行export VAR=value
时,看到已接受的答案确实会为您的.profile(或.bashrc)文件添加vagrant provision
,这就是我如何添加环境变量很快
source ~/.profile && [ -z "$VAR" ] && echo "export VAR=value" >> ~/.profile
故障:
source ~/.profile
:加载当前的.profile
文件[ -z "$VAR"]
:检查是否设置了VAR
,如果没有:echo "export VAR=value" >> ~/.profile
:将导出行添加到.profile
全部放在一起:
我通常使用puphpet作为我的流浪盒,所以我倾向于坚持使用它的目录结构,这意味着我的配置脚本放在puphpet/shell/*
(相对于Vagrantfile
文件)。在该文件中,您可以根据需要添加任意数量的环境变量:
#!/usr/bin/env bash
#Replace .profile with .bashrc if required
source ~/.profile
if [ -z "$VAR" ]; then # only checks if VAR is set, regardless of its value
echo "export VAR=value" >> ~/.profile
fi
#other env variables and profile stuff here
如果要将环境变量设置为特定值,即使设置了它们,也可以用此替换[ -z "$VAR" ]
(如Maks3w建议的那样):
if [ -z "$VAR" ] || [ "$VAR" != "value" ]; then
#same as before
fi
然后只需将其添加到您的Vagrantfile:
config.vm.provision "shell", path: "puphpet/shell/your-script.sh"
应该这样做......
答案 2 :(得分:5)
这个答案显示了如何使用Ruby HEREDOC(Here doc)语法修改VagrantFile
来添加环境变量
$install_user_vars = <<SCRIPT
source ~/.profile
if [ -z "$VAR" ] || [ "$VAR" != "value" ]; then
echo "export VAR=value" >> ~/.profile
fi
if [ $(pwd) != "/vagrant" ]; then
echo "cd /vagrant" >> ~/.profile
fi
SCRIPT
config.vm.provision "shell", inline: $install_user_vars
注意:关闭SCRIPT
必须是他自己行中的第一个字符
答案 3 :(得分:5)
以下是我$GOPATH
工作的方式:
config.vm.provision "shell", inline: <<-SHELL
echo -n > /etc/profile.d/gopath.sh
echo 'export GOPATH=$HOME/go' >> /etc/profile.d/gopath.sh
echo 'export PATH=$PATH:$GOPATH/bin' >> /etc/profile.d/gopath.sh
SHELL
使用单引号和$HOME
(而不是~
)是必要的 - 否则无法使其工作。
答案 4 :(得分:0)
我一直在找同样的事情。我想在Vagrantfile中设置http(s)_proxy
个环境变量。要求是我可以随时更改这些变量并vagrant reload
应用它们。
最后,我提出了解决方案:
config.vm.provision "shell", inline: "> /etc/profile.d/myvars.sh", run: "always"
config.vm.provision "shell", inline: "echo \"export http_proxy=http://proxy.somedomain.com:3128\" >> /etc/profile.d/myvars.sh", run: "always"
config.vm.provision "shell", inline: "echo \"export https_proxy=https://proxy.somedomain.com:3128\" >> /etc/profile.d/myvars.sh", run: "always"
0)/etc/profile.d/*.sh脚本在bash shell的启动时运行
1)从myvars.sh中删除所有内容
2)设置第一个变量
3)设置第二个变量
由于run: "always"我可以添加/删除变量,并在vagrant reload
之后应用它们。
答案 5 :(得分:0)
在CentOs7中,您需要将环境变量放在/etc/profile.d/
下
在我的情况下有效:
machine.vm.provision 'shell',
inline: 'sudo su - && echo "export VAR1=test export VAR2=test" > /etc/profile.d/vars.sh'