使用direnv

使用direnv

关于设置永久环境变量有很多重复的问题,但没有关于为特定文件夹设置它们的问题。

那么,如何为特定文件夹设置环境变量?

澄清:我希望我的CUSTOM_ENV_VAR仅在特定目录中工作时才激活.../custom_dir/。因此,当我在文件夹中启动程序时,程序会使用它CUSTOM_ENV_VAR,而当我在外部启动时 - 程序不会使用它。

答案1

使用direnv

安装direnv,这是一个用于此目的的工具,它是一个静态链接的可执行文件,可以挂接到你的 shell(csh、bash 等)

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

现在,在您想要设置环境变量的任何文件夹中,添加一个.direnvrc必须具有有效 bash 语法的文件。例如,您可以通过将以下内容设置为:来加载 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";

您可以在他们的维基百科

谢谢@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

相关内容