Подтвердить что ты не робот

Создайте переменную среды linux с помощью брандмауэра

У меня есть бродячая работа Ubuntu для целей развития. Я использовал создатель оболочки script для загрузки/установки зависимостей и создания некоторых псевдонимов, но я ударил стену с точки зрения использования создателя среды для создания переменных среды (которые используются для нескольких флагов в моем проекте). Первоначально у меня было что-то вроде:

export MY_VAR='value'

В моем устройстве обеспечения безопасности script, но затем выяснилось, что вы не можете добавлять переменные окружения изнутри оболочки script, запустив ее в обычном режиме. Достаточно справедливо, поэтому я попытался вместо этого изменить свою линию Vagrantfile:

config.vm.provision "shell", inline: "source setup.sh"

Это не решило проблему. Переменные среды все еще не были. Я попытался добавить экспорт напрямую как встроенный:

config.vm.provision "shell", inline: "export MY_VAR='value'"

Не повезло. По-прежнему нет глобальной среды, когда я ssh'ed дюйма Есть ли способ использовать оболочку script для установки переменной среды bash, или это время, чтобы бросить полотенце на средства обеспечения оболочки и узнать шеф-повара?

4b9b3361

Ответ 1

У вас должно быть обеспечение script добавить строку в ваш .profile:

echo "export VAR=value" >> ~/.profile

При входе в систему .profile script будет считаться bash, и переменная будет установлена.

Ответ 2

Увидев, что принятый ответ действительно добавляет 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 для своих бродячих боксов, поэтому я склонен придерживаться структуры каталогов, которую он использует, что означает предоставление моего обеспечения script в 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"

Это должно сделать трюк...

Ответ 3

В этом ответе показано, как добавлять переменные среды, просто изменяя 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

Примечание. Закрытие SCRIPT должно быть первым символом в его собственной строке

Ответ 4

Вот как я получил $GOPATH working:

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 (вместо ~) было необходимо --- я не мог заставить его работать иначе.

Ответ 5

Я искал то же самое. Я хотел установить переменные среды http(s)_proxy в Vagrantfile. Требовалось, чтобы я мог изменить эти переменные в любое время и 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
1) удаляет все из myvars.sh
2) задает первую переменную 3) устанавливает вторую переменную

Из-за run: "always" Я могу добавлять/удалять переменные, а после vagrant reload они применяются.

Ответ 6

В CentOs7 вам нужно поместить env vars в /etc/profile.d/ В моем случае это сработало:

machine.vm.provision 'shell',
  inline: 'sudo su - && echo "export VAR1=test export VAR2=test" > /etc/profile.d/vars.sh'