使用vagrant provisioner创建linux环境变量

MBr*_*zle 30 vagrant

为了开发目的,我有流浪汉运行Ubuntu.我已经使用shell脚本配置程序来下载/安装我的依赖项并创建一些别名,但是我在使用配置器创建环境变量(用于我的项目中的几个标志)方面遇到了障碍.最初我有类似的东西:

export MY_VAR='value'
Run Code Online (Sandbox Code Playgroud)

进入我的配置脚本,但后来发现你无法通过正常运行来从shell脚本中添加环境变量.很公平,所以我试着改变我的Vagrantfile行:

config.vm.provision "shell", inline: “source setup.sh"
Run Code Online (Sandbox Code Playgroud)

哪个没解决问题.环境变量仍然不存在.我尝试直接添加导出作为内联:

config.vm.provision "shell", inline: “export MY_VAR='value'"
Run Code Online (Sandbox Code Playgroud)

没运气.当我进入ssh时,仍然没有全球环境.有没有办法使用shell脚本来设置bash环境变量,或者是时候把它放在shell配置器上并学习厨师了吗?

rje*_*rje 33

您应该让配置脚本为.profile添加一行:

echo "export VAR=value" >> ~/.profile
Run Code Online (Sandbox Code Playgroud)

登录时,bash会读取.profile脚本,并设置变量.

  • 此修复不遵循"流浪的方式".在vagrant中添加这个将在每个提供的cicle上添加一个新行 (20认同)
  • 给其他人的提示,我使用的是 CentOS 7,我不得不做`echo "export VAR=value" >> ~/.bashrc` (2认同)
  • 也许这个答案可以修改为完整的,例如,显示整个config.vm ....行? (2认同)

Eli*_*gem 17

看到已接受的答案确实export VAR=value每次运行时都会在.profile(或.bashrc)文件中添加一个文件vagrant provision,这就是我如何快速添加环境变量

source ~/.profile && [ -z "$VAR" ] && echo "export VAR=value" >> ~/.profile
Run Code Online (Sandbox Code Playgroud)

分解:

  • 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
Run Code Online (Sandbox Code Playgroud)

如果要将环境变量设置为特定值,即使它们已设置,也可以替换[ -z "$VAR" ]为此(如Maks3w建议的那样):

if [ -z "$VAR" ] || [ "$VAR" != "value" ]; then
    #same as before
fi
Run Code Online (Sandbox Code Playgroud)

然后只需将其添加到您的Vagrantfile:

config.vm.provision "shell", path: "puphpet/shell/your-script.sh"
Run Code Online (Sandbox Code Playgroud)

那应该是诀窍......


Mak*_*s3w 5

这个答案显示了如何VagrantFile使用Ruby HEREDOC(Here doc)语法添加环境变量

  $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
Run Code Online (Sandbox Code Playgroud)

注意:关闭SCRIPT必须是他自己行中的第一个字符


rub*_*cks 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
Run Code Online (Sandbox Code Playgroud)

必须使用单引号和$HOME(而不是~)---我不能使它工作。