Установите постоянную переменную среды для папки

Существует много дублирующихся вопросов об установке постоянных переменных среды, но никаких вопросов об установке их для определенной папки.

Так, как установить переменную среды для определенной папки?

Clearifying: Я хочу мой CUSTOM_ENV_VAR активироваться только, когда я работаю в определенном dir .../custom_dir/. Таким образом, когда я запускаю программы в папке, программы используют это CUSTOM_ENV_VAR, когда я запускаюсь снаружи - программы не используют его.

6
задан 15 July 2018 в 12:27

1 ответ

Используя direnv

Установка direnv, который является инструментом с этой целью, который является статически связанным исполняемым файлом, который сцепляется в Вашу оболочку (csh, удар, и т.п.)

sudo apt-get install direnv && echo "eval "$(direnv hook bash)"" >> ~/.bashrc

Теперь к тому, какой бы ни папка Вы хотели бы, чтобы переменные среды были установлены, добавьте .direnvrc файл, который должен иметь допустимый синтаксис удара. Например, Вашего случая, можно загрузить управление версиями обоих pyenv, а также собственные переменные путем установки Вашего .direnvrc кому:

use_python() {
  local python_root=$PYENV_ROOT/versions/$1
  load_prefix "$python_root"
  if [[ -x "$python_root/bin/python" ]]; then
    layout python "$python_root/bin/python"
  else
    echo "Error: $python_root/bin/python can't be executed."
    exit
  fi
}
export CUSTOM_VAR="xyz";

Вы видите другие примеры в их Wiki

Благодаря @ChrisKuehl в комментариях для предложения


Другой альтернативный подход должен был бы переопределить PROMPT_COMMAND (как предложено в комментариях @steeldriver) для указания на функцию, которая загружает переменную среды путем добавления чего-то вроде этого к Вашему .bashrc

prmfn() {
  if [ "$PWD" == "yourdirectorypath" ]; then
    export CUSTOM_ENV_VAR=value
  else
    unset CUSTOM_ENV_VAR
  fi
}

export PROMPT_COMMAND=prmfn

Теперь, когда Вы входите yourdirectorypath, это автоматически установит CUSTOM_ENV_VAR, когда Вы выйдете из него, это будет unset(удалите) переменную, следовательно та переменная только доступна, когда текущий каталог yourdirectorypath

9
ответ дан 23 November 2019 в 07:33

Другие вопросы по тегам:

Похожие вопросы: