Существует много дублирующихся вопросов об установке постоянных переменных среды, но никаких вопросов об установке их для определенной папки.
Так, как установить переменную среды для определенной папки?
Clearifying: Я хочу мой CUSTOM_ENV_VAR
активироваться только, когда я работаю в определенном dir .../custom_dir/
. Таким образом, когда я запускаю программы в папке, программы используют это CUSTOM_ENV_VAR
, когда я запускаюсь снаружи - программы не используют его.
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