在一台 Mac 电脑上使用 Claude Code 时,经常会遇到多环境切换需求:
- 默认使用 LingyaAI 中转;
- 需要时切换到智谱 GLM Coding;
- 有时还要使用 Claude 官方账号登录;
- 不希望不同平台的 API Key、Token、Base URL 互相污染;
- 不希望每次手动 export 环境变量;
- 不希望 API Key 长期暴露在当前终端环境里。
一开始可能会在 ~/.zshrc 中直接写 alias:
alias claude=‘env -u ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY=“xxx” ANTHROPIC_BASE_URL=”https://api.xxx.com” /Users/yd/.nvm/versions/node/v24.15.0/bin/claude’
alias claude-zp=‘env -u ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY=“xxx” ANTHROPIC_BASE_URL=”https://open.bigmodel.cn/api/coding/paas/v4” /Users/yd/.nvm/versions/node/v24.15.0/bin/claude’
这种写法表面上可以切换环境,但实际使用中容易出现认证冲突、模型不兼容、alias 与 function 冲突、Claude Code 本地 settings 二次注入等问题。
最终成功方案是:
~/.zshrc 定义多环境启动函数 ~/.claude-env 单独保存不同平台的 Key ~/.claude/settings.json 保持干净,不放认证变量
最终命令效果:
claude # 默认走 LingyaAI claude-ly # LingyaAI 中转 claude-zp # 智谱 GLM Coding claude-official # Claude 官方账号登录
Claude Code 报错:
Auth conflict: Both a token (ANTHROPIC_AUTH_TOKEN) and an API key (ANTHROPIC_API_KEY) are set.
原因是同时存在:
ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY
这两个变量不能同时存在。
ANTHROPIC_API_KEY API Key 认证方式
ANTHROPIC_AUTH_TOKEN Bearer Token / Auth Token 认证方式
ANTHROPIC_BASE_URL Claude 兼容接口地址
原则:
使用 ANTHROPIC_API_KEY 时,不要设置 ANTHROPIC_AUTH_TOKEN。 使用 ANTHROPIC_AUTH_TOKEN 时,不要设置 ANTHROPIC_API_KEY。
执行:
env | grep -E ‘ANTHROPIC|CLAUDE’
如果当前 shell 中没有 ANTHROPIC_AUTH_TOKEN,但 Claude Code 进入后仍然冲突,说明问题可能来自 Claude Code 自己的配置文件:
~/.claude/settings.json
曾经出现过这样的配置:
{ “env”: {
"ANTHROPIC_AUTH_TOKEN": "sk-xxx", "ANTHROPIC_BASE_URL": "https://api.lingyaai.cn"
} }
这会导致:
~/.zshrc 已经清理了 AUTH_TOKEN ↓ 启动 Claude Code ↓ Claude Code 又从 /.claude/settings.json 注入 AUTH_TOKEN ↓ 同时又通过启动函数注入 API_KEY ↓ 认证冲突
所以最终要把 /.claude/settings.json 改成:
{ “env”: {} }
认证问题解决后,LingyaAI 可以正常使用,但智谱报错:
There’s an issue with the selected model (claude-sonnet-4-6[1m]). It may not exist or you may not have access to it. Run /model to pick a different model.
或者:
There’s an issue with the selected model (glm-5.1). It may not exist or you may not have access to it. Run /model to pick a different model.
原因是:智谱 Claude Code 接入方式和普通 Claude API 中转不同。
一开始错误地把智谱也按 LingyaAI 的方式配置:
export ANTHROPIC_API_KEY=”\(ZHIPU_CLAUDE_KEY" export ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/coding/paas/v4" export ANTHROPIC_MODEL="glm-5.1"
这个配置不适合 Claude Code 的智谱接入。
最终成功配置是:
export ANTHROPIC_AUTH_TOKEN="\)ZHIPU_CLAUDE_KEY” export ANTHROPIC_BASE_URL=”https://open.bigmodel.cn/api/anthropic”
export ANTHROPIC_DEFAULT_HAIKU_MODEL=“glm-4.5-air” export ANTHROPIC_DEFAULT_SONNET_MODEL=“glm-4.7” export ANTHROPIC_DEFAULT_OPUS_MODEL=“glm-5.1”
关键点:
智谱用 ANTHROPIC_AUTH_TOKEN,不用 ANTHROPIC_API_KEY。 智谱 Base URL 用 /api/anthropic,不用 /api/coding/paas/v4。 智谱不要强行设置 ANTHROPIC_MODEL=“glm-5.1”。 智谱通过 ANTHROPICDEFAULT*_MODEL 做模型映射。
最终需要维护三个位置:
~/.zshrc ~/.claude-env /.claude/settings.json
职责如下:
/.zshrc 定义命令、函数、PATH、Claude Code 启动逻辑
/.claude-env 保存 LingyaAI、智谱的 Key
/.claude/settings.json Claude Code 自己的配置,保持干净,不放认证变量
创建文件:
nano ~/.claude-env
内容如下:
export LINGYA_CLAUDE_KEY=“你的_lingyaai_key” export ZHIPU_CLAUDE_KEY=“你的_智谱_key”
保存:
Ctrl + O 回车 Ctrl + X
设置权限:
chmod 600 ~/.claude-env
检查:
ls -la /.claude-env
理想输出类似:
-rw——- 1 yd staff … /Users/yd/.claude-env
注意:不要直接执行这个文件。
错误用法:
/.claude-env
正确用法是由 ~/.zshrc 中的函数在子 shell 里加载:
source “$HOME/.claude-env”
先备份旧配置:
cp ~/.zshrc ~/.zshrc.bak
打开:
nano ~/.zshrc
完整替换为下面内容:
# ================================================================
~/.zshrc
macOS zsh 配置
Windsurf + NVM + Node + Claude Code 多环境隔离版
#
环境:
claude -> 默认 LingyaAI
claude-ly -> LingyaAI 中转
claude-zp -> 智谱 GLM Coding
claude-official -> Claude 官方账号登录
#
设计原则:
1. 不在 ~/.zshrc 里直接写 API Key
2. API Key 单独放在 ~/.claude-env
3. Key 只在子 shell 中临时加载
4. 每次启动前清理冲突环境变量
5. ~/.claude/settings.json 不再放认证变量
================================================================
================================================================
1. Windsurf PATH
================================================================
export PATH=“/Users/yd/.codeium/windsurf/bin:$PATH”
================================================================
2. NVM / Node.js
================================================================
export NVM_DIR=“$HOME/.nvm”
if [ -s “\(NVM_DIR/nvm.sh" ]; then . "\)NVM_DIR/nvm.sh” fi
if [ -s “\(NVM_DIR/bash_completion" ]; then . "\)NVM_DIR/bash_completion” fi
export PATH=“$PATH:/Users/yd/.nvm/versions/node/v24.15.0/bin”
================================================================
3. Claude Code Binary
================================================================
export CLAUDE_BIN=“/Users/yd/.nvm/versions/node/v24.15.0/bin/claude”
================================================================
4. 清理旧 alias
避免 zsh 报:
defining function based on alias `claude’
================================================================
unalias claude 2>/dev/null unalias claude-ly 2>/dev/null unalias claude-zp 2>/dev/null unalias claude-official 2>/dev/null
================================================================
5. Claude 环境变量清理函数
================================================================
claude-clean-env()
================================================================
6. 加载 ~/.claude-env
注意:不要在主 shell 直接 source ~/.claude-env
只在子 shell 中调用这个函数
================================================================
claude-load-keys()
================================================================
7. LingyaAI 中转版
#
使用方式:
claude-ly
#
说明:
LingyaAI 这里使用 ANTHROPIC_API_KEY。
================================================================
claude-ly()
================================================================
8. 智谱 GLM Coding 版
#
使用方式:
claude-zp
#
关键点:
1. 智谱 Claude Code 接入使用 ANTHROPIC_AUTH_TOKEN
2. Base URL 使用 https://open.bigmodel.cn/api/anthropic
3. 不要设置 ANTHROPIC_API_KEY
4. 不要设置 ANTHROPIC_MODEL=“glm-5.1”
5. 使用默认模型映射变量
================================================================
claude-zp()
================================================================
9. Claude 官方账号登录版
#
使用方式:
claude-official
#
说明:
不注入 ANTHROPIC_API_KEY
不注入 ANTHROPIC_AUTH_TOKEN
不注入 ANTHROPIC_BASE_URL
================================================================
claude-official() { (
claude-clean-env exec "$CLAUDE_BIN" "$@"
) }
================================================================
10. 默认 claude 命令
#
当前默认:
claude -> claude-ly
================================================================
claude() { claude-ly “$@” }
================================================================
11. 调试命令
#
使用方式:
claude-env-check
================================================================
claude-env-check()
================================================================
12. 清理当前 shell 的 Claude 相关环境变量
#
使用方式:
claude-reset-env
================================================================
claude-reset-env() { claude-clean-env echo “Claude related environment variables have been cleared.” }
================================================================
End of ~/.zshrc
================================================================
保存后执行:
source ~/.zshrc
这个文件不要再放:
ANTHROPIC_AUTH_TOKEN ANTHROPIC_API_KEY ANTHROPIC_BASE_URL ANTHROPIC_MODEL
直接重置:
mkdir -p ~/.claude
cp ~/.claude/settings.json ~/.claude/settings.json.bak 2>/dev/null
cat > ~/.claude/settings.json <<‘SETTINGS_JSON_EOF’ { “env”: {} } SETTINGS_JSON_EOF
检查:
cat ~/.claude/settings.json
理想输出:
{ “env”: {} }
重新加载:
source ~/.zshrc
检查命令类型:
type claude type claude-ly type claude-zp type claude-official
正确输出类似:
claude is a shell function from /Users/yd/.zshrc claude-ly is a shell function from /Users/yd/.zshrc claude-zp is a shell function from /Users/yd/.zshrc claude-official is a shell function from /Users/yd/.zshrc
检查当前 shell 环境:
env | grep -E ‘ANTHROPIC|CLAUDE|LINGYA|ZHIPU’
理想情况下只看到:
CLAUDE_BIN=/Users/yd/.nvm/versions/node/v24.15.0/bin/claude
不应该看到:
ANTHROPIC_AUTH_TOKEN=… ANTHROPIC_API_KEY=… ANTHROPIC_BASE_URL=… LINGYA_CLAUDE_KEY=… ZHIPU_CLAUDE_KEY=…
因为 Key 只应该在 Claude Code 子进程里临时存在。
默认 LingyaAI:
claude
LingyaAI:
claude-ly
智谱 GLM Coding:
claude-zp
Claude 官方账号:
claude-official
调试:
claude-env-check
清理当前 shell:
claude-reset-env
当输入:
claude
zsh 不是直接去某个目录找文件,而是按顺序解析命令。
大体顺序是:
alias -> function -> builtin -> PATH 中的可执行文件
执行:
type claude
如果看到:
claude is a shell function from /Users/yd/.zshrc
说明当前 claude 是 ~/.zshrc 中定义的函数。
当前配置中:
claude() { claude-ly “\(@" }
所以输入 claude 实际会进入 claude-ly。
而 claude-ly 最后执行:
exec "\)CLAUDE_BIN” “\(@"
其中:
\)CLAUDE_BIN
等于:
/Users/yd/.nvm/versions/node/v24.15.0/bin/claude
也就是 Claude Code 的真实可执行文件。
函数中使用了括号:
claude-ly() { (
claude-clean-env claude-load-keys export ANTHROPIC_API_KEY="$LINGYA_CLAUDE_KEY" exec "$CLAUDE_BIN" "$@"
) }
这里的:
( … )
表示子 shell。
好处是:
子 shell 中设置的环境变量,只影响 Claude Code 进程,不污染外部终端。
例如执行:
claude-ly
子 shell 里会设置:
ANTHROPIC_API_KEY=xxx ANTHROPIC_BASE_URL=https://api.lingyaai.cn
但退出 Claude Code 后,外部终端不会保留这些变量。
这就是多环境隔离的关键。
alias 简单,但不适合复杂多环境切换。
问题包括:
- 不方便写逻辑判断;
- 不方便检查 Key 是否为空;
- 不方便加载
~/.claude-env; - 不方便做调试输出;
- 容易和 function 同名冲突;
- 不方便做子 shell 隔离。
例如如果已经有:
alias claude=‘…’
又定义:
claude() { … }
zsh 可能报:
defining function based on alias claude' parse error near()’
所以最终配置中先执行:
unalias claude 2>/dev/null unalias claude-ly 2>/dev/null unalias claude-zp 2>/dev/null unalias claude-official 2>/dev/null
防止旧 alias 干扰函数定义。
ANTHROPIC_API_KEY
https://api.lingyaai.cn 可不固定模型,或使用 Claude 模型名 智谱 GLM Coding
ANTHROPIC_AUTH_TOKEN
https://open.bigmodel.cn/api/anthropic 使用
ANTHROPICDEFAULT*_MODEL 映射 官方 Claude 不注入 Key / Token 不注入 Base URL 使用官方登录态
智谱不能这样配:
export ANTHROPIC_API_KEY=”\(ZHIPU_CLAUDE_KEY" export ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/coding/paas/v4" export ANTHROPIC_MODEL="glm-5.1"
正确配置是:
export ANTHROPIC_AUTH_TOKEN="\)ZHIPU_CLAUDE_KEY” export ANTHROPIC_BASE_URL=”https://open.bigmodel.cn/api/anthropic”
export ANTHROPIC_DEFAULT_HAIKU_MODEL=“glm-4.5-air” export ANTHROPIC_DEFAULT_SONNET_MODEL=“glm-4.7” export ANTHROPIC_DEFAULT_OPUS_MODEL=“glm-5.1”
执行:
source ~/.zshrc
或者重新打开终端。
检查:
type claude
如果输出:
claude is an alias for …
查找旧 alias:
grep -n “alias claude” ~/.zshrc
删除或注释掉:
# alias claude=‘…’
alias claude-zp=‘…’
然后:
source ~/.zshrc
报错:
defining function based on alias claude' parse error near()’
说明 alias 和 function 同名。
解决:在定义函数前加入:
unalias claude 2>/dev/null unalias claude-ly 2>/dev/null unalias claude-zp 2>/dev/null unalias claude-official 2>/dev/null
检查:
env | grep -E ‘ANTHROPIC|CLAUDE|LINGYA|ZHIPU’
如果看到:
LINGYA_CLAUDE_KEY=… ZHIPU_CLAUDE_KEY=…
说明你可能在 ~/.zshrc 里直接写了:
source ~/.claude-env
不推荐这样做。
应该只在子 shell 函数中执行:
claude-load-keys
检查:
cat ~/.claude/settings.json
如果看到:
{ “env”: {
"ANTHROPIC_AUTH_TOKEN": "xxx"
} }
或:
{ “env”: {
"ANTHROPIC_API_KEY": "xxx"
} }
改成:
{ “env”: {} }
错误:
There’s an issue with the selected model (glm-5.1). It may not exist or you may not have access to it.
不要设置:
export ANTHROPIC_MODEL=“glm-5.1”
改用:
export ANTHROPIC_DEFAULT_HAIKU_MODEL=“glm-4.5-air” export ANTHROPIC_DEFAULT_SONNET_MODEL=“glm-4.7” export ANTHROPIC_DEFAULT_OPUS_MODEL=“glm-5.1”
并确保智谱使用:
export ANTHROPIC_AUTH_TOKEN=“$ZHIPU_CLAUDE_KEY” export ANTHROPIC_BASE_URL=”https://open.bigmodel.cn/api/anthropic”
Claude Code 提示:
Note: ctrl + z now suspends Claude Code, ctrl + _ undoes input.
如果按了 Ctrl + Z,程序不是退出,而是挂起。
查看挂起任务:
jobs
恢复前台:
fg
杀掉挂起任务:
kill %1
其中 %1 是 jobs 中显示的任务编号。
不要把 API Key 明文贴到聊天、截图、博客、Git 仓库、日志中。
如果 Key 曾经暴露过,建议立即:
- 去对应平台删除旧 Key;
- 重新生成新 Key;
- 更新
/.claude-env; - 检查 Git 仓库是否提交过 Key;
- 检查 shell 历史记录中是否有 Key。
检查历史记录:
history | grep -E ‘ANTHROPIC|CLAUDE|sk-|ZHIPU|LINGYA’
zsh 历史文件通常是:
/.zsh_history
这次成功配置的核心是:
1. 用 ~/.zshrc 定义多环境函数。
- 用 ~/.claude-env 单独保存 Key。
- 用子 shell 临时加载 Key,避免污染当前终端。
- LingyaAI 使用 ANTHROPIC_API_KEY。
- 智谱使用 ANTHROPIC_AUTH_TOKEN。
- 智谱 Base URL 使用 https://open.bigmodel.cn/api/anthropic。
- 智谱不要设置 ANTHROPIC_MODEL=“glm-5.1”。
- 智谱使用 ANTHROPICDEFAULT*_MODEL 做模型映射。
- ~/.claude/settings.json 保持 { “env”: {} }。
- 官方 Claude 使用 claude-official,不注入任何 Key 或 Base URL。
最终可用命令:
claude # 默认 LingyaAI claude-ly # LingyaAI claude-zp # 智谱 GLM Coding claude-official # Claude 官方账号一句话总结:
Shell 层用函数做入口,Key 文件只在子 shell 中加载,Claude settings 保持干净,不同服务按各自认证方式配置,才能稳定实现 Claude Code 多环境切换。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/270806.html