用途:direnv 是按目录管理环境变量的 shell 扩展。进入含 .envrc 的目录时自动加载环境,离开时卸载,适合为各项目配置独立变量、密钥与语言环境。
主要能力:通过 shell hook 拦截目录切换,在 bash 子壳中执行 .envrc 并捕获导出的变量。提供标准库函数:PATH_add/path_add 管理路径,dotenv/dotenv_if_exists 加载 .env,source_up 沿父目录链式加载,layout node/python/python3/pipenv/ruby/go/perl 配置语言环境,use nix/flake、use rbenv/node/julia 集成版本工具,env_vars_required 校验必需变量,direnv_version 限定最低版本,on_git_branch 按分支设值,watch_file/watch_dir 监控文件变化,has/expand_path/find_up/strict_env/load_prefix/source_url 等工具。
使用方式:macOS 用 brew install direnv;Linux 有 apt、dnf、pacman 或安装脚本。需在 shell 配置中加入 hook,如 zsh 用 eval "$(direnv hook zsh)"、bash 用 eval "$(direnv hook bash)"、fish 用 direnv hook fish | source,之后重启 shell。创建 .envrc 后必须执行 direnv allow 才生效,direnv deny 可撤销。常用命令包括 direnv reload、status、dump、edit、version。可在 ~/.config/direnv/direnvrc 自定义函数。
适用场景:逐项目环境变量、团队配置分发、密钥分层管理、Nix 与版本管理器集成、IDE 集成。
限制:新改动的 .envrc 必须显式 allow,基于内容哈希,改动一字节即失效;.envrc 编辑后需重进目录或 reload;layout python 的虚拟环境绑定主机 Python 版本;source_up 会搜索祖先目录,父级 .envrc 可能泄漏到子项目;zsh 中 hook 应放在提示符设置之后。切勿提交密钥。