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 --versionWindows 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 指向其他名称,把该名称加入检查列表即可。不要直接运行并分享 env、printenv 或整个配置文件的输出。
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 与普通终端不同。远程窗口则要检查远端那一层。
按下面顺序处理,避免同时改多个地方:
- 保存编辑内容,确认没有必须保持的长任务。
- 关闭受影响的终端;必要时完全退出 VS Code,而不只是关闭一个窗口。
- 从已核对的运行环境重新启动,再创建新终端。
- 复查程序路径、版本和变量是否存在。
- 若只是扩展失败,转查扩展使用的 Provider、认证来源及运行主机。
关闭所有窗口可能中断终端任务,执行前先保存工作。无需把全部系统变量永久复制到编辑器配置里,也无需把 Key 写进项目仓库。
五、最后才验证接口
如果两边程序、主机和配置已经对齐,再按 Codex 接入或 Claude Code 接入提供的免费读取步骤检查。使用同一目标地址、同一令牌权限和同一网络条件比较结果。
模型列表成功不能证明工具调用和真实任务成功;需要进一步执行时,使用最小任务并留意实际计费。提交工单可提供“两边环境差异表+脱敏错误时间”,不要提供密钥值。