昨天在 Windows WSL2 环境里装好了 Claude Code,顺手也把 Codex 一起装上了。今天花了半个上午,把 cc-switch 的配置同步问题搞明白了。
问题是这样的
我的机器是 Windows,装了 WSL2 Ubuntu。平时在 Windows 桌面用 Claude Code,昨天在WSL2 里也装了Claude Code。一开始图省事,cc-switch 安装在 Windows 侧,配置都指向 Windows 本地的 C:\Users\<用户名>\.claude。
后来在 WSL2 里也需要跑 Claude Code,就在 cc-switch 里把配置目录覆盖改成 \\wsl$\Ubuntu-24.04\home\<用户名>\.claude。改完之后 WSL 里的 Claude Code 能用了,但 Windows 侧的 Claude Code 又回到官方默认配置了,等于说我每次切换都得在 cc-switch 里改一次配置目录覆盖,点保存,再改回来。
笨办法,但能用,就是烦。
配置目录覆盖是什么
cc-switch 的"配置目录覆盖"本质上是在设置 CLAUDE_CONFIG_DIR 和 CODEX_CONFIG_DIR 这两个环境变量。但这个设置是存在 cc-switch 自己的配置文件里的:C:\Users\<用户名>\.cc-switch\settings.json。
"claudeConfigDir": "\\\\wsl$\\Ubuntu-24.04\\home\\<用户名>\\.claude",
"codexConfigDir": "\\\\wsl$\\Ubuntu-24.04\\home\\<用户名>\\.codex",
这说明什么?说明 cc-switch 的配置目录覆盖只影响它自己写入的目标路径。Windows 侧正常启动的 Claude Code 或 Codex 读取哪个配置,跟 cc-switch 当时指向哪个目录有关系,但又不完全由 cc-switch 控制——真正决定工具行为的是环境变量或者默认路径。
解决思路
想明白这点之后,方案其实很简单:让 WSL 直接使用 Windows 的配置目录。
cc-switch 在 Windows 侧改 C:\Users\<用户名>\.claude\settings.json,WSL 里只要设置 CLAUDE_CONFIG_DIR="/mnt/c/Users/<用户名>/.claude",就能读到同一份配置。两边始终是同一个文件,改一处、两边都生效。
具体操作
在 WSL 的 ~/.bashrc 里加两行:
export CLAUDE_CONFIG_DIR="/mnt/c/Users/<用户名>/.claude"
export CODEX_CONFIG_DIR="/mnt/c/Users/<用户名>/.codex"
然后 source ~/.bashrc 生效。
验证一下:
$ echo $CODEX_CONFIG_DIR
/mnt/c/Users/<用户名>/.codex
$ codex --help
# 正常输出帮助信息
$ claude --version
# 正常输出版本号


最终效果
cc-switch 保持在 Windows 侧管理配置,指向 C:\Users\<用户名>\.claude 和 C:\Users\<用户名>\.codex。WSL 侧通过环境变量指向同样的目录。不管在哪个环境运行 Claude Code 或 Codex,读到的都是同一份 settings.json,cc-switch 切换模型之后立即生效,不用再手动改配置目录覆盖了。
顺便记一下
折腾过程中看了 cc-switch 的配置文件位置。如果以后遇到 cc-switch 配置不生效的问题,可以先查这个文件:
C:\Users\<用户名>\.cc-switch\settings.json
里面存了 cc-switch 自身的所有设置,包括配置目录覆盖的路径。注册表里是找不到的,它没用注册表。
另外,cc-switch 的 WebDAV 同步功能打开后,可以把配置同步到云存储。这个功能挺实用,多设备场景下不用每个设备都重新配一遍。
留下你的评论