diff --git a/setup.sh b/setup.sh index 48c1b2f..19539b1 100755 --- a/setup.sh +++ b/setup.sh @@ -6,6 +6,7 @@ set -e # 确保 PATH 包含常见的包管理器路径 export PATH="$HOME/.bun/bin:$HOME/.local/bin:$HOME/.npm-global/bin:/usr/local/bin:$PATH" +export BUN_INSTALL="$HOME/.bun" # ========== 颜色定义 ========== RED='\033[0;31m' @@ -21,6 +22,44 @@ success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; } warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; } error() { echo -e "${RED}[ERROR]${NC} $1"; } +# ========== 检测 shell 配置文件 ========== +get_shell_rc() { + if [ -n "${ZSH_VERSION:-}" ] || [ "${SHELL##*/}" = "zsh" ]; then + echo "$HOME/.zshrc" + elif [ -n "${BASH_VERSION:-}" ] || [ "${SHELL##*/}" = "bash" ]; then + if [ -f "$HOME/.bashrc" ]; then + echo "$HOME/.bashrc" + else + echo "$HOME/.bash_profile" + fi + else + echo "$HOME/.profile" + fi +} + +# ========== 刷新环境变量 ========== +reload_env() { + local rc_file + rc_file=$(get_shell_rc) + + # 重新加载 PATH + export PATH="$HOME/.bun/bin:$HOME/.local/bin:$HOME/.npm-global/bin:/usr/local/bin:$PATH" + export BUN_INSTALL="$HOME/.bun" + + # 从配置文件中提取并加载环境变量 + if [ -f "$rc_file" ]; then + # 提取 export 行并执行 + while IFS= read -r line; do + if [[ "$line" =~ ^export\ ([A-Za-z_][A-Za-z0-9_]*)= ]]; then + eval "$line" 2>/dev/null || true + fi + done < "$rc_file" + fi + + # 刷新命令缓存 + hash -r 2>/dev/null || true +} + # ========== 工具配置(兼容 bash 3.x)========== TOOL_NAMES_1="Claude Code" TOOL_NAMES_2="Gemini CLI" @@ -336,13 +375,39 @@ main() { echo -e "${CYAN}========================================${NC}" echo "" + # 自动刷新环境变量 + info "正在刷新环境变量..." + reload_env + if [[ $failed -eq 0 ]]; then success "所有选中的工具配置成功!" echo "" - echo -e "${YELLOW}提示: 如果命令未找到,请执行以下操作之一:${NC}" - echo -e " 1. 重新打开终端" - echo -e " 2. 或执行: ${CYAN}source ~/.bashrc${NC}" - echo -e " 3. 或执行: ${CYAN}export PATH=\"\$HOME/.bun/bin:\$PATH\"${NC}" + + # 验证工具是否可用 + local all_ok=true + for i in $tools_to_configure; do + local tool_cmd=$(get_tool_cmd "$i") + local tool_name=$(get_tool_name "$i") + if command_exists "$tool_cmd"; then + echo -e " ${GREEN}✓${NC} $tool_name ($tool_cmd) 可用" + else + echo -e " ${RED}✗${NC} $tool_name ($tool_cmd) 未找到" + all_ok=false + fi + done + + echo "" + if [[ "$all_ok" == "false" ]]; then + warning "部分工具在当前会话中不可用" + echo -e "${YELLOW}请执行以下命令刷新环境:${NC}" + echo "" + local rc_file=$(get_shell_rc) + echo -e " ${CYAN}source $rc_file${NC}" + echo "" + echo -e "或者重新打开终端" + else + success "所有工具已就绪,可以直接使用!" + fi else warning "有 $failed 个工具配置失败" fi