Files
aicodemirror-switcher/cc-env-from-profiles.sh
2025-11-03 23:32:29 +08:00

140 lines
4.5 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 轻量版 Claude Code 环境变量部署脚本(基于 profiles.json
# 要求:
# 1) 读取 profiles.json 展示可选列表
# 2) 选择后按照 env-deploy.sh 的参数写入ANTHROPIC_BASE_URL、ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN(空)
# 3) 略去不必要的环境检查,假定环境完备(含 jq、node 可用)
# 4) 使用 Node 调用 /Users/kid/.claude/cc-aicodemirror-statusline-plus/save-cookie.js 传入所选 profile 的 cookie
set -e
BLUE='\033[0;34m'
GREEN='\033[0;32m'
RED='\033[1;31m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROFILES_JSON="$SCRIPT_DIR/profiles.json"
ANTHROPIC_BASE_URL="https://api.aicodemirror.com/api/claudecode"
echo -e "\n${BLUE}========================================${NC}"
echo -e "${BLUE}Claude Code Profile 部署${NC}"
echo -e "${BLUE}========================================${NC}\n"
# 读取 profiles.json 并展示列表
if [ ! -f "$PROFILES_JSON" ]; then
echo -e "${RED}[ERROR]${NC} 未找到 profiles.json$PROFILES_JSON"
exit 1
fi
COUNT=$(jq '.profiles | length' "$PROFILES_JSON")
if [ "$COUNT" -eq 0 ]; then
echo -e "${RED}[ERROR]${NC} profiles.json 中未找到任何 profiles"
exit 1
fi
echo -e "可用的 Profiles"
for ((i=0; i<COUNT; i++)); do
NAME=$(jq -r ".profiles[$i].name" "$PROFILES_JSON")
echo "[$((i+1))] $NAME"
done
echo
read -r -p "请输入要使用的编号: " CHOICE
if ! [[ "$CHOICE" =~ ^[0-9]+$ ]]; then
echo -e "${RED}[ERROR]${NC} 请输入有效的数字编号"
exit 1
fi
INDEX=$((CHOICE-1))
if [ "$INDEX" -lt 0 ] || [ "$INDEX" -ge "$COUNT" ]; then
echo -e "${RED}[ERROR]${NC} 编号超出范围"
exit 1
fi
SELECTED_NAME=$(jq -r ".profiles[$INDEX].name" "$PROFILES_JSON")
API_KEY=$(jq -r ".profiles[$INDEX].api_key" "$PROFILES_JSON")
COOKIE=$(jq -r ".profiles[$INDEX].cookie" "$PROFILES_JSON")
echo -e "\n选择的 Profile${GREEN}$SELECTED_NAME${NC}"
# 简化版 shell 与配置文件定位(假定环境完备)
CURRENT_SHELL=$(basename "$SHELL")
case "$CURRENT_SHELL" in
bash)
if [[ "$OSTYPE" == darwin* ]]; then CONFIG_FILE="$HOME/.bash_profile"; else CONFIG_FILE="$HOME/.bashrc"; fi
;;
zsh)
CONFIG_FILE="$HOME/.zshrc"
;;
fish)
CONFIG_FILE="$HOME/.config/fish/config.fish"
;;
*)
# 默认写入 zshrc避免中断
CONFIG_FILE="$HOME/.zshrc"
;;
esac
# 清理旧的环境变量配置(最小化处理)
if [ -f "$CONFIG_FILE" ]; then
if [[ "$CURRENT_SHELL" == "fish" ]]; then
sed -i.tmp -E '/^[[:space:]]*set[[:space:]]+-x[[:space:]]+ANTHROPIC_BASE_URL/d' "$CONFIG_FILE" 2>/dev/null || true
sed -i.tmp -E '/^[[:space:]]*set[[:space:]]+-x[[:space:]]+ANTHROPIC_API_KEY/d' "$CONFIG_FILE" 2>/dev/null || true
sed -i.tmp -E '/^[[:space:]]*set[[:space:]]+-x[[:space:]]+ANTHROPIC_AUTH_TOKEN/d' "$CONFIG_FILE" 2>/dev/null || true
else
sed -i.tmp -E '/^[[:space:]]*export[[:space:]]+ANTHROPIC_BASE_URL=/d' "$CONFIG_FILE" 2>/dev/null || true
sed -i.tmp -E '/^[[:space:]]*export[[:space:]]+ANTHROPIC_API_KEY=/d' "$CONFIG_FILE" 2>/dev/null || true
sed -i.tmp -E '/^[[:space:]]*export[[:space:]]+ANTHROPIC_AUTH_TOKEN=/d' "$CONFIG_FILE" 2>/dev/null || true
fi
rm -f "$CONFIG_FILE.tmp" 2>/dev/null || true
fi
# 追加新配置
if [[ "$CURRENT_SHELL" == "fish" ]]; then
cat >> "$CONFIG_FILE" << EOF
# Claude Code Environment Variables (auto from profiles)
set -x ANTHROPIC_BASE_URL "$ANTHROPIC_BASE_URL"
set -x ANTHROPIC_API_KEY "$API_KEY"
set -x ANTHROPIC_AUTH_TOKEN ""
# End Claude Code Environment Variables
EOF
else
cat >> "$CONFIG_FILE" << EOF
# Claude Code Environment Variables (auto from profiles)
export ANTHROPIC_BASE_URL="$ANTHROPIC_BASE_URL"
export ANTHROPIC_API_KEY="$API_KEY"
export ANTHROPIC_AUTH_TOKEN=""
# End Claude Code Environment Variables
EOF
fi
# 立刻在当前会话导出
export ANTHROPIC_BASE_URL="$ANTHROPIC_BASE_URL"
export ANTHROPIC_API_KEY="$API_KEY"
export ANTHROPIC_AUTH_TOKEN=""
echo -e "${GREEN}[OK]${NC} 已写入并激活环境变量:"
echo "ANTHROPIC_BASE_URL=$ANTHROPIC_BASE_URL"
echo "ANTHROPIC_API_KEY=****${API_KEY: -4}"
echo "ANTHROPIC_AUTH_TOKEN=\"\""
# 调用 Node 脚本保存 cookie
NODE_SCRIPT="/Users/kid/.claude/cc-aicodemirror-statusline-plus/save-cookie.js"
if [ -f "$NODE_SCRIPT" ]; then
node "$NODE_SCRIPT" "$COOKIE"
echo -e "${GREEN}[OK]${NC} 已调用 Node 保存 cookie"
else
echo -e "${RED}[WARN]${NC} 未找到 Node 脚本:$NODE_SCRIPT,跳过保存 cookie"
fi
echo -e "\n${GREEN}完成!${NC} 新开终端会话即生效或运行source \"$CONFIG_FILE\""
exit 0