vs code 在 macos 上默认不加载 shell 配置文件中的环境变量,因其集成终端以非登录、非交互式方式启动;应优先通过 terminal.integrated.env.osx 静态注入变量,或通过终端执行 code . 启动 vs code 以继承环境,避免依赖 .env 文件或启用登录 shell 模式。
vs code 在 macos 上默认不加载 ~/.zshrc、~/.zprofile 或其他 shell 配置文件里的环境变量,即使你已在其中正确设置了 path、rustup_home 或 xcode_developer_dir。这不是 vs code 的 bug,而是设计使然:它的集成终端以非登录、非交互式方式启动,跳过大部分 shell 初始化流程。要让终端真正“继承”你想要的环境,得用对方法。
优先使用 terminal.integrated.env.osx 静态注入
这是最稳定、跨项目、无需依赖 shell 启动逻辑的方式。VS Code 会在每个新终端实例启动时,直接把配置好的变量注入进程环境,优先级高于系统默认值,也不怕 ~/.zshrc 是否被 sourced。
- 打开 VS Code 设置(Cmd + ,),点击右上角「打开设置 (JSON)」图标
- 在
settings.json中添加或修改如下字段:
"PATH": "${env:PATH}:/opt/homebrew/bin:/usr/local/bin",
"RUSTUP_HOME": "/Users/yourname/.rustup",
"XCODE_DEVELOPER_DIR": "/Applications/Xcode.app/Contents/Developer"
}
注意:${env:PATH} 是合法语法,用于继承当前会话已有的 PATH;但不能写成 $(which zsh) 这类命令替换——它只做变量引用,不做执行。
改完后,必须关闭所有已打开的终端 tab,再新建一个才生效。
确保 VS Code 自身启动环境干净且完整
如果你从 Dock 或 Spotlight 启动 VS Code,它继承的是 macOS GUI 登录会话的环境,而该环境通常没加载你的 shell 配置(比如 ~/.zshrc)。这就导致即使你在 settings.json 里没配任何变量,终端也拿不到你日常用的工具路径。
- 推荐做法:在 iTerm2、Terminal 或 Alacritty 中先执行
code .启动 VS Code - 这样 VS Code 就能继承当前终端的全部环境变量,包括你
export过的所有内容 - 如需长期生效,可将
code命令加入系统 PATH(通过ln -s /Applications/Visual\ Studio\ Code.app/Contents/Resources/app/bin/code /usr/local/bin/code)
不要依赖 .env 文件自动注入终端
很多人误以为项目根目录下的 .env 文件会被 VS Code 终端自动读取——其实完全不会。这个文件只对调试器(launch.json 中的 envFile)、Python 插件(python.envFile)和语言服务器生效。
- 在终端里运行
python script.py时,.env里的API_KEY=xxx不会出现在os.environ中 - 验证方式很简单:在 VS Code 终端中输入
echo $API_KEY,输出为空就说明没加载 - 如确需在终端中加载
.env,可用set -a; source .env; set +a手动导入(仅当前会话有效)
进阶:启用登录 Shell 模式(慎用)
如果项目依赖大量 shell 初始化逻辑(比如 nvm、pyenv、rbenv 的自动切换),可以强制 VS Code 终端以登录 Shell 方式启动,从而加载 ~/.zprofile(zsh 登录 shell 默认读取的文件)。
- 在
settings.json中添加:
⚠️ 注意:这会让终端启动变慢,且可能引发与 VS Code 内置功能(如任务检测、路径解析)的兼容问题。仅当静态注入 env.osx 无法满足复杂环境需求时再考虑。











