返回技术博客

ENVIRONMENT GUIDE

VS Code 能用、终端不能用?先检查这四类环境差异

对照 VS Code、系统终端、WSL、SSH 和容器的程序路径与环境变量,定位配置差异,并用不输出密钥的脚本检查。

最后验证:2026-09-20

同一个电脑、同一个 API Key,在 VS Code 里成功,在系统终端里失败,常见原因是程序、运行主机、环境变量或配置来源不同。编辑器里的终端和扩展也不是同一个进程,不能只凭窗口在一起就认为配置共享。

本文核对于 2026 年 9 月 20 日,提供适用于开发工具的环境排查方法。Codex 的具体字段参见 配置排查,Claude Code 的认证和报错参见 故障排查

一、先画清楚请求在哪里发出

使用位置可能的执行环境应检查哪里
Windows 系统终端Windows 本机Windows 程序路径、用户配置、进程环境
VS Code 的 WSL 窗口WSL;部分扩展仍可能在本地运行当前终端位置和具体扩展的运行位置
Remote SSH 窗口远端主机;本地扩展另算远端用户目录、远端网络与扩展安装状态
Dev Container容器;本地 UI 仍在宿主机容器用户、挂载目录、容器环境
普通本地 VS Code 窗口本地编辑器与其子进程VS Code 的启动来源及终端配置

VS Code 官方远程开发架构允许工作区扩展在远端运行,界面扩展在本地运行。具体工具跑在哪里,要查看当前窗口与扩展状态,不能把所有扩展一概视为远端。

本机的 127.0.0.1 代理地址也不会天然等于远端或容器里的同一个地址。若网络错误只出现在远端,先检查远端是否能使用该代理;不要立即改 API Key。

二、比较程序路径和版本

分别在“成功”和“失败”的终端执行以下命令。macOS、Linux、WSL:

pwd
command -v codex
codex --version

Windows PowerShell:

Get-Location
(Get-Command codex).Source
codex --version

这里以 Codex 为例。其他工具替换为相应命令,并使用该工具支持的版本参数。常见差异包括系统安装与 npm 安装并存、不同 Node 版本管理器带来不同 PATH,以及 Windows 与 WSL 各自安装了一份。

如果路径和版本不同,先决定要使用哪一份,再调整对应环境。不要直接删除用户目录或全部配置,这会让原本可用的入口也失去工作条件。

三、检查变量是否存在,不输出变量值

在成功与失败的 macOS/Linux/WSL 终端分别运行下面的只读检查。它只输出“已设置/未设置”,不会打印密钥或代理地址:

python3 - <<'PY'
import os

names = (
    "CODEX_HOME", "OPENAI_API_KEY", "ROOTFLOWAI_API_KEY",
    "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_API_KEY",
    "HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "NO_PROXY",
    "http_proxy", "https_proxy", "all_proxy", "no_proxy",
)
for name in names:
    state = "已设置" if os.environ.get(name) else "未设置"
    print(f"{name}: {state}")
PY

输出“已设置”只证明有值,不证明它有效或被当前工具采用。如果 Provider 的 env_key 指向其他名称,把该名称加入检查列表即可。不要直接运行并分享 envprintenv 或整个配置文件的输出。

Windows PowerShell 可使用同样只检查存在性的方式:

$names = @("CODEX_HOME", "OPENAI_API_KEY", "ROOTFLOWAI_API_KEY", "HTTPS_PROXY")
foreach ($name in $names) {
    $value = [Environment]::GetEnvironmentVariable($name, "Process")
    $state = if ([string]::IsNullOrEmpty($value)) { "未设置" } else { "已设置" }
    Write-Output ("{0}: {1}" -f $name, $state)
}

这个检查只反映当前终端子进程环境,不能直接证明 IDE 扩展宿主中的变量相同。还需要核对扩展设置与它的启动方式。

四、理解为什么开新窗口仍可能用旧环境

VS Code 官方说明:第一个实例继承启动它的父进程环境,后续实例可能沿用首个正在运行的实例的环境。因此,在终端里新设变量后再执行 code .,不一定能让已有 VS Code 实例获得新值。

集成终端还会受 shell 启动文件、终端 profile、设置和扩展注入影响。macOS/Linux 的环境继承与登录 shell 行为,也可能让 PATH 与普通终端不同。远程窗口则要检查远端那一层。

按下面顺序处理,避免同时改多个地方:

  1. 保存编辑内容,确认没有必须保持的长任务。
  2. 关闭受影响的终端;必要时完全退出 VS Code,而不只是关闭一个窗口。
  3. 从已核对的运行环境重新启动,再创建新终端。
  4. 复查程序路径、版本和变量是否存在。
  5. 若只是扩展失败,转查扩展使用的 Provider、认证来源及运行主机。

关闭所有窗口可能中断终端任务,执行前先保存工作。无需把全部系统变量永久复制到编辑器配置里,也无需把 Key 写进项目仓库。

五、最后才验证接口

如果两边程序、主机和配置已经对齐,再按 Codex 接入Claude Code 接入提供的免费读取步骤检查。使用同一目标地址、同一令牌权限和同一网络条件比较结果。

模型列表成功不能证明工具调用和真实任务成功;需要进一步执行时,使用最小任务并留意实际计费。提交工单可提供“两边环境差异表+脱敏错误时间”,不要提供密钥值。

资料来源