140 lines
4.5 KiB
Bash
Executable File
140 lines
4.5 KiB
Bash
Executable File
#!/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
|
||
|
||
|