一键切换 Claude Code 模型:一个轻量的 Shell 脚本方案

随笔2026-05-133 分钟claude-codeshelldeepseekglm模型切换

Claude Code 默认使用 Anthropic 官方模型,但通过反向代理或兼容 API,我们也能接入 DeepSeek、GLM 等第三方模型。

问题在于——每次切换模型都要手动改 ~/.claude/settings.json,改 URL、改 Key、改模型名,繁琐且容易出错。

核心思路很简单:每种模型配置独立成一个 JSON 文件,脚本一键替换到 settings.json。于是我写了一个不到 50 行的 Shell 脚本,把切换变成了一步交互式选择。

一、目录结构一览

整个方案只涉及一个脚本目录,结构极其简洁:

~/.claude/
├── settings.json               ← 实际生效的配置,脚本会自动覆盖它(不要手动改)
└── switch-tools/               ← 脚本和模型配置的目录(可存放至任意路径)
    ├── switch-model.sh         ← 一键切换脚本(核心)
    ├── deepseek-v4-pro.json    ← 对应模型的 settings 配置,将会被直接替换为 settings.json
    ├── deepseek-v4-flash.json
    ├── glm-4.6v.json
    └── ...                     ← 按需新增更多模型配置

文件命名约定:每个 JSON 配置文件的文件名即为该模型的标识名(不含 .json 后缀),脚本会提取出来作为菜单选项展示。

例如 deepseek-v4-pro.json → 菜单项 deepseek-v4-pro

与 settings.json 的关系~/.claude/settings.json 是 Claude Code 唯一识别的配置文件。

脚本做的事情本质上就是 cp 目标模型.json ~/.claude/settings.json,简单直接,没有任何黑魔法。

二、使用方式

# 1. 将后文的 switch-model.sh 脚本和 xx.json 配置放在同一目录下,比如 ~/.claude/switch-tools/
# 2. 运行 (运行之前需要替换json中的apiKey)
sh ~/.claude/switch-tools/switch-model.sh

也可以加个别名放到 .zshrc 里:

alias cm="~/.claude/switch-tools/switch-model.sh"

之后随时 cm 一键切换。

三、运行效果

$ sh ~/.claude/switch-tools/switch-model.sh

当前模型: deepseek-v4-pro

请选择要切换的配置:
  1. deepseek-v4-flash
  2. deepseek-v4-pro
  3. glm-4.6v

输入编号 (1-3),其他退出:

输入编号,回车——脚本把对应的 JSON 文件拷贝到 ~/.claude/settings.json,切换即刻生效(已经启动的会话可能需要重启)。

四、完整脚本

#!/bin/sh
# 一键切换 Claude Code 模型配置

CONFIG_DIR="$(cd "$(dirname "$0")" && pwd)"
SETTINGS_FILE="$HOME/.claude/settings.json"

# 获取配置文件列表(排除自身)
names=""
i=0
for f in "$CONFIG_DIR"/*.json; do
  [ -f "$f" ] || continue
  name=$(basename "$f" .json)
  [ "$name" = "switch-model" ] && continue
  i=$((i+1))
  names="$names $name"
done

[ "$i" -eq 0 ] && echo "❌ 未找到配置文件" && exit 1

current=$(grep -o '"model"[^,]*' "$SETTINGS_FILE" 2>/dev/null | head -1 | cut -d'"' -f4)
echo "当前模型: $current"
echo ""
echo "请选择要切换的配置:"

idx=1
for name in $names; do
  echo "  $idx. $name"
  idx=$((idx+1))
done
echo ""
printf "输入编号 (1-%d),其他退出: " "$i"
read -r choice

# 检查输入是否有效数字
case "$choice" in
  ''|*[!0-9]*)
    echo "已取消"
    exit 0
    ;;
esac

if [ "$choice" -lt 1 ] || [ "$choice" -gt "$i" ]; then
  echo "已取消"
  exit 0
fi

# 根据编号找到对应的配置名
idx=1
for name in $names; do
  if [ "$idx" -eq "$choice" ]; then
    cp "$CONFIG_DIR/$name.json" "$SETTINGS_FILE"
    new_model=$(grep -o '"model"[^,]*' "$SETTINGS_FILE" | head -1 | cut -d'"' -f4)
    echo "✅ 已切换到: $name ($new_model)"
    break
  fi
  idx=$((idx+1))
done

五、配置文件示例

1、deepseek-v4-flash.json

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
    "ANTHROPIC_API_KEY": "你的 DeepSeek API Key",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
    "CLAUDE_SKIP_LOGIN": "1",
    "API_TIMEOUT_MS": "3000000",
    "ANTHROPIC_CUSTOM_MODEL_OPTION": "deepseek-v4-flash",
    "ANTHROPIC_CUSTOM_MODEL_OPTION_NAME": "deepseek-v4-flash"
  },
  "model": "deepseek-v4-flash",
  "skipDangerousModePermissionPrompt": true
}

2、deepseek-v4-pro.json

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
    "ANTHROPIC_API_KEY": "你的 DeepSeek API Key",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
    "CLAUDE_SKIP_LOGIN": "1",
    "API_TIMEOUT_MS": "3000000",
    "ANTHROPIC_CUSTOM_MODEL_OPTION": "deepseek-v4-pro",
    "ANTHROPIC_CUSTOM_MODEL_OPTION_NAME": "deepseek-v4-pro"
  },
  "model": "deepseek-v4-pro",
  "skipDangerousModePermissionPrompt": true
}

3、glm-4.6v.json

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://open.bigmodel.cn/api/anthropic",
    "ANTHROPIC_API_KEY": "你的智谱 API Key",
    "API_TIMEOUT_MS": "3000000",
    "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
  },
  "model": "glm-4.6v",
  "skipDangerousModePermissionPrompt": true
}

六、扩展性与设计细节

安全校验:输入不是数字、超出范围,直接退出,不会误操作。

路径无关CONFIG_DIR="$(cd "$(dirname "$0")" && pwd)" 确保无论在哪个目录执行脚本,都能正确找到配置文件。

排除自身:脚本即使命名为 switch-model.json 也不会被误识别为模型配置。

即时生效:直接覆盖 settings.json,新启动的 Claude Code 会话即刻生效;已运行的会话需重启后才能使用新模型。

这个方案的妙处在于零耦合。想加新模型?新建一个 JSON 文件即可,脚本不用改一行。OpenRouter、Groq、本地 Ollama——只要支持 Anthropic 兼容 API,都能用同样的方式接入。复杂任务用 Opus、日常编码用 DeepSeek、长上下文场景用 GLM——这个小工具能省下不少来回改配置的功夫。


工具本身不到 50 行代码,没有依赖,纯 POSIX Shell。所有配置文件一目了然,新增和删除都只需要操作 JSON 文件。简单、直接、好用。