为文件夹设置永久环境变量

Lad*_*lav 6 environment-variables

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

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

清除:我希望CUSTOM_ENV_VAR仅在我在特定目录中工作时激活.../custom_dir/。所以当我在文件夹中启动程序时,程序使用它CUSTOM_ENV_VAR,当我在外面启动时 - 程序不使用它。

Ami*_* KK 9

使用 direnv

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

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

现在到您想要设置环境变量的任何文件夹,添加一个.direnvrc必须具有有效 bash 语法的文件。例如你的情况,你可以通过设置你.direnvrc来加载pyenv的版本管理以及你自己的变量:

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

您可以在他们的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
Run Code Online (Sandbox Code Playgroud)

现在,当您输入时yourdirectorypath,它会自动设置CUSTOM_ENV_VAR,当您退出时,它会unset(删除)该变量,因此该变量仅在当前目录为yourdirectorypath