diff --git a/scripts/run/cursor_mac_id_modifier.sh b/scripts/run/cursor_mac_id_modifier.sh index 5eb07c0..535e6f9 100644 --- a/scripts/run/cursor_mac_id_modifier.sh +++ b/scripts/run/cursor_mac_id_modifier.sh @@ -213,6 +213,10 @@ remove_cursor_trial_folders() { log_info "✅ [完成] 深度权限修复完成" echo + # 🔧 额外修复:再次调用统一权限修复函数确保一致性 + log_info "🔧 [额外修复] 使用统一权限修复函数进行最终确认..." + ensure_cursor_directory_permissions + # 显示操作统计 log_info "📊 [统计] 操作完成统计:" echo " ✅ 成功删除: $deleted_count 个文件夹" @@ -299,8 +303,14 @@ restart_cursor_and_wait() { if [ -f "$config_path" ]; then log_info "✅ [成功] 配置文件已生成: $config_path" + + # 🛡️ 关键修复:配置文件生成后立即确保权限正确 + ensure_cursor_directory_permissions else log_warn "⚠️ [警告] 配置文件未在预期时间内生成,继续执行..." + + # 即使配置文件未生成,也要确保目录权限正确 + ensure_cursor_directory_permissions fi # 强制关闭Cursor @@ -424,7 +434,58 @@ start_cursor_to_generate_config() { fi } -# 🛠️ 修改机器码配置(增强版) +# �️ 确保Cursor目录权限正确(新增函数) +ensure_cursor_directory_permissions() { + log_info "🛡️ [权限修复] 确保Cursor目录权限正确..." + + local cursor_support_dir="$HOME/Library/Application Support/Cursor" + local cursor_home_dir="$HOME/.cursor" + + # 关键目录列表 + local directories=( + "$cursor_support_dir" + "$cursor_support_dir/User" + "$cursor_support_dir/User/globalStorage" + "$cursor_support_dir/logs" + "$cursor_support_dir/CachedData" + "$cursor_support_dir/User/workspaceStorage" + "$cursor_support_dir/User/History" + "$cursor_home_dir" + "$cursor_home_dir/extensions" + ) + + # 确保所有目录存在并有正确权限 + for dir in "${directories[@]}"; do + if [ ! -d "$dir" ]; then + mkdir -p "$dir" 2>/dev/null || true + fi + + # 设置目录权限:用户可读写执行,组和其他用户可读执行 + chmod 755 "$dir" 2>/dev/null || true + chown "$(whoami)" "$dir" 2>/dev/null || true + done + + # 特别处理:使用sudo确保关键目录权限 + if sudo chown -R "$(whoami)" "$cursor_support_dir" 2>/dev/null; then + log_info "✅ [权限] Application Support/Cursor目录权限修复成功" + else + log_warn "⚠️ [权限] Application Support/Cursor目录权限修复失败" + fi + + if sudo chown -R "$(whoami)" "$cursor_home_dir" 2>/dev/null; then + log_info "✅ [权限] .cursor目录权限修复成功" + else + log_warn "⚠️ [权限] .cursor目录权限修复失败" + fi + + # 设置用户写入权限 + chmod -R u+w "$cursor_support_dir" 2>/dev/null || true + chmod -R u+w "$cursor_home_dir" 2>/dev/null || true + + log_info "✅ [权限修复] Cursor目录权限修复完成" +} + +# �🛠️ 修改机器码配置(增强版) modify_machine_code_config() { local mode=${1:-"FULL"} @@ -568,9 +629,33 @@ except Exception as e: sys.exit(1) " 2>&1) - if [ $? -eq 0 ] && [[ "$python_result" == "SUCCESS" ]]; then + # 🔧 关键修复:正确解析Python执行结果 + local python_exit_code=$? + local python_success=false + + # 检查Python脚本是否成功执行 + if [ $python_exit_code -eq 0 ]; then + # 检查输出中是否包含SUCCESS标记(忽略其他输出) + if echo "$python_result" | grep -q "SUCCESS"; then + python_success=true + log_info "✅ [Python] 配置修改执行成功" + else + log_warn "⚠️ [Python] 执行成功但未找到SUCCESS标记" + log_info "💡 [调试] Python完整输出:" + echo "$python_result" + fi + else + log_error "❌ [Python] 脚本执行失败,退出码: $python_exit_code" + log_info "💡 [调试] Python完整输出:" + echo "$python_result" + fi + + if [ "$python_success" = true ]; then log_info "⏳ [进度] 5/5 - 验证修改结果..." + # 🔒 关键修复:在验证前确保文件权限正确 + chmod 644 "$config_path" 2>/dev/null || true + # 验证修改是否成功 local verification_result=$(python3 -c " import json @@ -602,8 +687,20 @@ except Exception as e: print(f'VERIFICATION_ERROR: {e}') " 2>&1) - if [[ "$verification_result" == "VERIFICATION_SUCCESS" ]]; then + # 检查验证结果(忽略其他输出,只关注最终结果) + if echo "$verification_result" | grep -q "VERIFICATION_SUCCESS"; then log_info "✅ [进度] 5/5 - 修改验证成功" + + # 🔐 关键修复:设置配置文件为只读保护 + if chmod 444 "$config_path" 2>/dev/null; then + log_info "🔐 [保护] 配置文件已设置为只读保护" + else + log_warn "⚠️ [警告] 无法设置配置文件只读保护" + fi + + # 🛡️ 关键修复:确保目录权限正确 + ensure_cursor_directory_permissions + echo log_info "🎉 [成功] 机器码配置修改完成!" log_info "📋 [详情] 已更新以下标识符:" @@ -615,20 +712,33 @@ except Exception as e: log_info "💾 [备份] 原配置已备份至: $backup_name" return 0 else - log_error "❌ [错误] 修改验证失败: $verification_result" - log_info "🔄 [恢复] 正在恢复备份..." - cp "$backup_path" "$config_path" + log_error "❌ [错误] 修改验证失败" + log_info "💡 [验证详情]:" + echo "$verification_result" + log_info "🔄 [恢复] 正在恢复备份并修复权限..." + + # 恢复备份并确保权限正确 + if cp "$backup_path" "$config_path"; then + chmod 644 "$config_path" 2>/dev/null || true + ensure_cursor_directory_permissions + log_info "✅ [恢复] 已恢复原始配置并修复权限" + else + log_error "❌ [错误] 恢复备份失败" + fi return 1 fi else - log_error "❌ [错误] 修改配置失败: $python_result" - log_info "💡 [调试信息] Python执行结果: $python_result" + log_error "❌ [错误] 修改配置失败" + log_info "💡 [调试信息] Python执行详情:" + echo "$python_result" - # 尝试恢复备份 + # 尝试恢复备份并修复权限 if [ -f "$backup_path" ]; then - log_info "🔄 [恢复] 正在恢复备份配置..." + log_info "🔄 [恢复] 正在恢复备份配置并修复权限..." if cp "$backup_path" "$config_path"; then - log_info "✅ [恢复] 已恢复原始配置" + chmod 644 "$config_path" 2>/dev/null || true + ensure_cursor_directory_permissions + log_info "✅ [恢复] 已恢复原始配置并修复权限" else log_error "❌ [错误] 恢复备份失败" fi diff --git a/scripts/test/test_cursor_permissions.sh b/scripts/test/test_cursor_permissions.sh new file mode 100644 index 0000000..338edb3 --- /dev/null +++ b/scripts/test/test_cursor_permissions.sh @@ -0,0 +1,139 @@ +#!/bin/bash + +# Cursor权限测试脚本 +# 用于验证修复后的权限设置是否正确 + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 日志函数 +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# 测试权限函数 +test_cursor_permissions() { + echo + log_info "🔍 [测试] 开始测试Cursor目录权限..." + + local cursor_support_dir="$HOME/Library/Application Support/Cursor" + local cursor_home_dir="$HOME/.cursor" + + # 关键目录列表 + local directories=( + "$cursor_support_dir" + "$cursor_support_dir/User" + "$cursor_support_dir/User/globalStorage" + "$cursor_support_dir/logs" + "$cursor_support_dir/CachedData" + "$cursor_support_dir/User/workspaceStorage" + "$cursor_support_dir/User/History" + "$cursor_home_dir" + "$cursor_home_dir/extensions" + ) + + local all_ok=true + + echo + log_info "📁 [检查] 目录存在性和权限检查:" + + for dir in "${directories[@]}"; do + if [ -d "$dir" ]; then + local perms=$(ls -ld "$dir" | awk '{print $1}') + local owner=$(ls -ld "$dir" | awk '{print $3}') + local group=$(ls -ld "$dir" | awk '{print $4}') + + # 检查是否可写 + if [ -w "$dir" ]; then + echo -e " ✅ $dir" + echo -e " 权限: $perms | 所有者: $owner | 组: $group | 可写: 是" + else + echo -e " ❌ $dir" + echo -e " 权限: $perms | 所有者: $owner | 组: $group | 可写: 否" + all_ok=false + fi + else + echo -e " ❌ $dir (不存在)" + all_ok=false + fi + done + + echo + + # 测试创建文件 + log_info "📝 [测试] 测试文件创建权限..." + + local test_file="$cursor_support_dir/logs/test_permission_$(date +%s).txt" + if touch "$test_file" 2>/dev/null; then + log_info "✅ [成功] 可以在logs目录创建文件" + rm -f "$test_file" 2>/dev/null + else + log_error "❌ [失败] 无法在logs目录创建文件" + all_ok=false + fi + + # 测试配置文件权限 + local config_file="$cursor_support_dir/User/globalStorage/storage.json" + if [ -f "$config_file" ]; then + log_info "📋 [检查] 配置文件权限:" + local config_perms=$(ls -l "$config_file" | awk '{print $1}') + local config_owner=$(ls -l "$config_file" | awk '{print $3}') + echo " 文件: $config_file" + echo " 权限: $config_perms | 所有者: $config_owner" + + if [ -r "$config_file" ]; then + log_info "✅ [成功] 配置文件可读" + else + log_error "❌ [失败] 配置文件不可读" + all_ok=false + fi + else + log_warn "⚠️ [警告] 配置文件不存在: $config_file" + fi + + echo + + # 总结 + if [ "$all_ok" = true ]; then + log_info "🎉 [结果] 所有权限测试通过!" + return 0 + else + log_error "❌ [结果] 权限测试失败,存在问题" + echo + log_info "💡 [建议] 运行以下命令修复权限:" + echo -e "${BLUE}sudo chown -R \$(whoami) \"$HOME/Library/Application Support/Cursor\"${NC}" + echo -e "${BLUE}sudo chown -R \$(whoami) \"$HOME/.cursor\"${NC}" + echo -e "${BLUE}chmod -R u+w \"$HOME/Library/Application Support/Cursor\"${NC}" + echo -e "${BLUE}chmod -R u+w \"$HOME/.cursor\"${NC}" + return 1 + fi +} + +# 主函数 +main() { + echo -e "${GREEN}========================================${NC}" + echo -e "${GREEN} Cursor 权限测试脚本${NC}" + echo -e "${GREEN}========================================${NC}" + + test_cursor_permissions + + echo + echo -e "${GREEN}========================================${NC}" + echo -e "${GREEN} 测试完成${NC}" + echo -e "${GREEN}========================================${NC}" +} + +# 执行主函数 +main "$@"