DeepFloodbeta

Claude 配置切换脚本分享

接上文: Claude Code 介绍及使用分享

  1. 创建 ~/.claude/switch.sh, 内容:
#!/usr/bin/env bash
set -euo pipefail
# Claude 配置切换脚本
# 用法:switch.sh [list | use <name> | global <name>]

CLAUDE_DIR="${HOME}/.claude"
GLOBAL_ENV="${CLAUDE_DIR}/claude.env"
mkdir -p "$CLAUDE_DIR"

# API 配置:name|base_url|token|note
read -r -d '' PROFILES <<'EOF' || true
claude.ai|https://api.anthropic.com||Claude Pro 需 /login 登录
anyrouter|https://anyrouter.top|YOUR-TOKEN|
# 例: custom|https://your.endpoint|sk-xxxxxxxx|自定义说明
EOF

# 通用配置查找函数
find_profile() {
    local query="$1" i=0
    echo "$PROFILES" | sed '/^#/d; /^$/d' | while IFS='|' read -r name url token note; do
        i=$((i+1))
        if [[ "$query" == "$name" || "$query" == "$i" ]]; then
            printf '%s|%s|%s|%s\n' "$name" "$url" "${token:-}" "${note:-}"
            return
        fi
    done
}
# 显示当前状态
show_status() {
    local current="${ANTHROPIC_BASE_URL:-<未设置>}"
    local global=""
    [[ -f "$GLOBAL_ENV" ]] && global=$(grep ANTHROPIC_BASE_URL "$GLOBAL_ENV" 2>/dev/null | cut -d"'" -f2 || { echo ""; })
    echo "当前: $current${global:+ | 全局: $global}"
}
# 列出所有配置
list_profiles() {
    local i=0
    echo "$PROFILES" | sed '/^#/d; /^$/d' | while IFS='|' read -r name url token note; do
        printf " %2d) %-12s %-30s %s\n" "$((++i))" "$name" "$url" "${note:+💡 $note}"
    done
}
# 显示切换提示
show_cs_hints() {
  echo -e "\n⚡ \`cs use $1\` (当前会话临时切换) | \`cs global $1\` (全局切换)"
}
# 交互式菜单
interactive_menu() {
    {
        echo "Claude 配置切换器"
        echo "=================="
        show_status
        echo "可用配置:"
        list_profiles
        echo " 0) 退出"
    } >&2
    
    local total=$(echo "$PROFILES" | sed '/^#/d; /^$/d' | wc -l)
    while read -rp "请选择配置 (0-$total): " n; do
        [[ "$n" =~ ^[0-9]+$ ]] || { echo "❌ 请输入数字" >&2; continue; }
        [[ "$n" -eq 0 ]] && { echo "已取消" >&2; exit 0; }
        [[ "$n" -ge 1 && "$n" -le "$total" ]] && break
        echo "❌ 无效选择" >&2
    done
    
    local line; line=$(find_profile "$n")
    IFS='|' read -r name url token note <<<"$line"
    
    # export for parent shell
    echo "export ANTHROPIC_BASE_URL='$url'"
    [[ -n "$token" ]] && { echo "export ANTHROPIC_AUTH_TOKEN='$token'"; } || { echo "unset ANTHROPIC_AUTH_TOKEN"; }
    
    {
        echo "✅ 已选择: $name | $url"
        [[ -n "$note" ]] && { echo "💡 $note"; }
        show_cs_hints "$name"
    } >&2
}
# 当前shell中切换
cmd_use() {
    local target="${1:-}"
    [[ -z "$target" ]] && { echo "❌ 用法: $0 use <name>" >&2; return 2 2>/dev/null || exit 2; }
    
    local line; line=$(find_profile "$target")
    [[ -z "$line" ]] && { echo "❌ 未找到配置: $target" >&2; return 1 2>/dev/null || exit 1; }
    
    IFS='|' read -r name url token note <<<"$line"
    
    # export for parent shell
    echo "export ANTHROPIC_BASE_URL='$url'"
    [[ -n "$token" ]] && { echo "export ANTHROPIC_AUTH_TOKEN='$token'"; } || { echo "unset ANTHROPIC_AUTH_TOKEN"; }
    
    {
        echo "✅ 已切换到: $name | $url"
        [[ -n "$note" ]] && { echo "💡 $note"; }
    } >&2
}
# 设置全局默认
cmd_global() {
    local target="${1:-}"
    [[ -z "$target" ]] && { echo "❌ 用法: $0 global <name>" >&2; exit 2; }
    
    local line; line=$(find_profile "$target")
    [[ -z "$line" ]] && { echo "❌ 未找到配置: $target" >&2; exit 1; }
    
    IFS='|' read -r name url token note <<<"$line"
    
    # 写入全局配置
    {
        echo "export ANTHROPIC_BASE_URL='$url'"
        [[ -n "$token" ]] && { echo "export ANTHROPIC_AUTH_TOKEN='$token'"; } || { echo "unset ANTHROPIC_AUTH_TOKEN"; }
    } > "$GLOBAL_ENV"
    
    # 为当前会话也输出导出语句
    echo "export ANTHROPIC_BASE_URL='$url'"
    [[ -n "$token" ]] && { echo "export ANTHROPIC_AUTH_TOKEN='$token'"; } || { echo "unset ANTHROPIC_AUTH_TOKEN"; }
    
    {
        echo "✅ 已写入全局配置: $GLOBAL_ENV"
        echo "   $url"
        [[ -n "$note" ]] && { echo "💡 $note"; }
    } >&2
}
# 主逻辑
case "${1:-}" in
    use)    shift; cmd_use "${1:-}" ;;
    global) shift; cmd_global "${1:-}" ;;
    "")     interactive_menu ;;
    *)      echo "用法: $0 [use <name>|global <name>]" >&2; exit 2 ;;
esac
  1. 配置 ~/.bashrc~/.zshrc 加上:
# 自动加载全局 Claude 配置
[ -f "$HOME/.claude/claude.env" ] && source "$HOME/.claude/claude.env"
# claude switch
cs() {
  eval "$(~/.claude/switch.sh "$@")"
}

用法

只需编辑 ~/.claude/switch.sh 中的 PROFILES 下面的内容来添加或修改 Claude API 配置.
无论是 claude 官方 还三方中转都可以配置在这里, 每行一个API, 格式为: 服务名称|api地址|token|说明(选填), 比如:

anyrouter|https://anyrouter.top|YOUR-TOKEN|
在 Bash/Zsh 使用 cs 切换配置
cs # 查看当前配置 或 当前终端切换API
cs use claude.ai # 当前终端切换API
cs global anyrouter # 设置全局使用的API
  • 感谢分享

  • 感谢分享

  • 不错,不过,使用cc switch 更便捷呢

  • 我是用ccswitch的,方便快速