接上文: Claude Code 介绍及使用分享
- 创建
~/.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
- 配置
~/.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的,方便快速