VSCode 集成终端的变量缓存问题

2026/02/04

背景

最近在使用 VSCode 配合 Remote-SSH 插件连接远程服务器开发时,我遇到了一个非常顽固的问题。

问题描述

我在服务器的 .bashrc 文件中删除了某个环境变量(例如 ANTHROPIC_AUTH_TOKEN)。按理说,彻底退出 VSCode 并重新连接服务器后,这个变量应该消失才对。

然而,奇怪的事情发生了:在 VSCode 中打开新的集成终端(Integrated Terminal),该变量依然存在,且能被正常读取。

排查过程

起初我以为是服务器缓存问题,但我做了一个对比测试:

  1. VSCode 集成终端:变量依然存在(异常)。
  2. iTerm2 直连服务器:变量已消失(符合预期)。
  3. 检查配置:确认没有在 VSCode 的 terminal.integrated.env.linux 中手动配置过该变量。

这让我 100% 确信:这是 VSCode 集成终端特有的机制导致的。

原因分析

经过一番搜索,我发现这是 VSCode 集成终端的环境继承(Inheritance)机制在作祟。VSCode 为了保持会话的一致性,默认会缓存并继承初始连接时的环境变量,即使你在 .bashrc 中做了修改,新开的终端窗口有时仍会“继承”旧的快照。

参考讨论:SegmentFault 相关问答

解决方案

解决办法非常简单,只需要强制 VSCode 不继承环境即可。在 settings.json 中添加以下配置:

{
    "terminal.integrated.inheritEnv": false
}

保存后重启 VSCode 终端,困扰许久的“幽灵变量”终于彻底消失了。