diff --git a/scripts/run/cursor_mac_id_modifier.sh b/scripts/run/cursor_mac_id_modifier.sh index 8abb980..0d9001c 100644 --- a/scripts/run/cursor_mac_id_modifier.sh +++ b/scripts/run/cursor_mac_id_modifier.sh @@ -475,174 +475,95 @@ start_cursor_to_generate_config() { fi } -# 🛡️ 确保Cursor目录权限正确(新增函数) +# 🛡️ 确保Cursor目录权限正确(简化版本) ensure_cursor_directory_permissions() { - log_info "🛡️ [增强权限修复] 开始深度权限修复和诊断..." + log_info "🛡️ [权限修复] 开始简化权限修复..." local cursor_support_dir="$HOME/Library/Application Support/Cursor" local cursor_home_dir="$HOME/.cursor" local current_user=$(whoami) - # 扩展的关键目录列表(包含所有可能的子目录) - local directories=( - "$cursor_support_dir" - "$cursor_support_dir/User" - "$cursor_support_dir/User/globalStorage" - "$cursor_support_dir/User/globalStorage/backups" - "$cursor_support_dir/User/workspaceStorage" - "$cursor_support_dir/User/History" - "$cursor_support_dir/logs" - "$cursor_support_dir/CachedData" - "$cursor_support_dir/CachedExtensions" - "$cursor_support_dir/CachedExtensionVSIXs" - "$cursor_support_dir/User/snippets" - "$cursor_support_dir/User/keybindings" - "$cursor_support_dir/crashDumps" - "$cursor_home_dir" - "$cursor_home_dir/extensions" - ) - - # 🔍 第一步:权限诊断 - log_info "🔍 [诊断] 执行权限诊断..." - local permission_issues=() - - for dir in "${directories[@]}"; do - if [ -d "$dir" ]; then - local owner=$(ls -ld "$dir" | awk '{print $3}') - local perms=$(ls -ld "$dir" | awk '{print $1}') - - if [ "$owner" != "$current_user" ]; then - permission_issues+=("所有权问题: $dir (当前所有者: $owner)") - fi + # 🔧 执行4个核心权限修复命令 + log_info "🔧 [修复] 执行核心权限修复命令..." - if [ ! -w "$dir" ]; then - permission_issues+=("写入权限问题: $dir") - fi - fi - done - - if [ ${#permission_issues[@]} -gt 0 ]; then - log_warn "⚠️ [诊断] 发现 ${#permission_issues[@]} 个权限问题:" - for issue in "${permission_issues[@]}"; do - echo " ❌ $issue" - done - else - log_info "✅ [诊断] 现有目录权限检查通过" - fi - - # 🔧 第二步:强制权限修复 - log_info "🔧 [修复] 开始强制权限修复..." - - # 确保所有目录存在 - log_info "📁 [创建] 确保所有必要目录存在..." - for dir in "${directories[@]}"; do - if [ ! -d "$dir" ]; then - if mkdir -p "$dir" 2>/dev/null; then - log_info "✅ [创建] 成功创建目录: ${dir/$HOME/\~}" - else - log_warn "⚠️ [创建] 创建目录失败: ${dir/$HOME/\~}" - fi - fi - done - - # 🔑 第三步:使用sudo进行深度权限修复 - log_info "🔑 [深度修复] 使用sudo进行深度权限修复..." - - # 修复主目录所有权 - if sudo chown -R "$current_user:staff" "$cursor_support_dir" 2>/dev/null; then + # 命令1: 修复Application Support/Cursor目录所有权 + log_info "🔑 [所有权] 修复Application Support/Cursor目录所有权..." + if sudo chown -R "$current_user" "$cursor_support_dir" 2>/dev/null; then log_info "✅ [所有权] Application Support/Cursor目录所有权修复成功" else log_error "❌ [所有权] Application Support/Cursor目录所有权修复失败" + return 1 fi - if sudo chown -R "$current_user:staff" "$cursor_home_dir" 2>/dev/null; then + # 命令2: 修复.cursor目录所有权 + log_info "🔑 [所有权] 修复.cursor目录所有权..." + if sudo chown -R "$current_user" "$cursor_home_dir" 2>/dev/null; then log_info "✅ [所有权] .cursor目录所有权修复成功" else log_error "❌ [所有权] .cursor目录所有权修复失败" + return 1 fi - # 设置递归权限 - log_info "🔐 [权限] 设置递归权限..." - if sudo chmod -R 755 "$cursor_support_dir" 2>/dev/null; then - log_info "✅ [权限] Application Support/Cursor目录权限设置成功" + # 命令3: 设置Application Support/Cursor写入权限 + log_info "🔓 [写入权限] 设置Application Support/Cursor写入权限..." + if chmod -R u+w "$cursor_support_dir" 2>/dev/null; then + log_info "✅ [写入权限] Application Support/Cursor写入权限设置成功" else - log_warn "⚠️ [权限] Application Support/Cursor目录权限设置失败" + log_error "❌ [写入权限] Application Support/Cursor写入权限设置失败" + return 1 fi - if sudo chmod -R 755 "$cursor_home_dir" 2>/dev/null; then - log_info "✅ [权限] .cursor目录权限设置成功" - else - log_warn "⚠️ [权限] .cursor目录权限设置失败" - fi + # 命令4: 设置.cursor/extensions写入权限 + log_info "🔓 [写入权限] 设置.cursor/extensions写入权限..." + local extensions_dir="$cursor_home_dir/extensions" - # 🔓 第四步:确保用户写入权限 - log_info "🔓 [写入权限] 确保用户写入权限..." - if sudo chmod -R u+w "$cursor_support_dir" 2>/dev/null; then - log_info "✅ [写入] Application Support/Cursor写入权限设置成功" - else - log_warn "⚠️ [写入] Application Support/Cursor写入权限设置失败" + # 确保extensions目录存在 + if [ ! -d "$extensions_dir" ]; then + mkdir -p "$extensions_dir" 2>/dev/null || true fi - if sudo chmod -R u+w "$cursor_home_dir" 2>/dev/null; then - log_info "✅ [写入] .cursor写入权限设置成功" + if chmod -R u+w "$extensions_dir" 2>/dev/null; then + log_info "✅ [写入权限] .cursor/extensions写入权限设置成功" else - log_warn "⚠️ [写入] .cursor写入权限设置失败" + log_error "❌ [写入权限] .cursor/extensions写入权限设置失败" + return 1 fi - # 🎯 第五步:特别处理logs目录 - log_info "🎯 [特殊处理] 特别处理logs目录权限..." - local logs_dir="$cursor_support_dir/logs" - - # 确保logs目录存在并有正确权限 - sudo mkdir -p "$logs_dir" 2>/dev/null || true - sudo chown -R "$current_user:staff" "$logs_dir" 2>/dev/null || true - sudo chmod -R 755 "$logs_dir" 2>/dev/null || true + # 🔍 验证权限修复结果 + log_info "🔍 [验证] 验证权限修复结果..." - # 测试logs目录创建权限 - local test_log_dir="$logs_dir/test_$(date +%s)" - if mkdir -p "$test_log_dir" 2>/dev/null; then - log_info "✅ [测试] logs目录创建权限测试成功" - rmdir "$test_log_dir" 2>/dev/null || true - else - log_error "❌ [测试] logs目录创建权限测试失败" + local verification_failed=false - # 强制修复logs目录权限 - log_info "🔧 [强制修复] 强制修复logs目录权限..." - sudo rm -rf "$logs_dir" 2>/dev/null || true - sudo mkdir -p "$logs_dir" 2>/dev/null || true - sudo chown "$current_user:staff" "$logs_dir" 2>/dev/null || true - sudo chmod 755 "$logs_dir" 2>/dev/null || true + # 验证Application Support/Cursor目录 + if [ ! -w "$cursor_support_dir" ]; then + log_error "❌ [验证失败] Application Support/Cursor目录仍无写入权限" + verification_failed=true fi - # 🔍 第六步:最终验证 - log_info "🔍 [最终验证] 执行最终权限验证..." - local final_issues=() - - for dir in "${directories[@]}"; do - if [ -d "$dir" ]; then - if [ ! -w "$dir" ]; then - final_issues+=("$dir") - fi - fi - done + # 验证.cursor目录 + if [ ! -w "$cursor_home_dir" ]; then + log_error "❌ [验证失败] .cursor目录仍无写入权限" + verification_failed=true + fi - if [ ${#final_issues[@]} -eq 0 ]; then - log_info "✅ [验证成功] 所有目录权限验证通过" - else - log_error "❌ [验证失败] 以下目录仍有权限问题:" - for dir in "${final_issues[@]}"; do - echo " ❌ $dir" - done + # 验证extensions目录 + if [ -d "$extensions_dir" ] && [ ! -w "$extensions_dir" ]; then + log_error "❌ [验证失败] .cursor/extensions目录仍无写入权限" + verification_failed=true + fi - # 提供手动修复命令 - log_info "💡 [手动修复] 如果问题持续,请手动执行以下命令:" - echo "sudo chown -R $current_user:staff \"$cursor_support_dir\"" - echo "sudo chown -R $current_user:staff \"$cursor_home_dir\"" - echo "sudo chmod -R 755 \"$cursor_support_dir\"" - echo "sudo chmod -R 755 \"$cursor_home_dir\"" + if [ "$verification_failed" = true ]; then + log_error "❌ [验证失败] 权限修复验证失败" + log_info "💡 [手动修复] 请手动执行以下命令:" + echo "sudo chown -R $current_user \"$cursor_support_dir\"" + echo "sudo chown -R $current_user \"$cursor_home_dir\"" + echo "chmod -R u+w \"$cursor_support_dir\"" + echo "chmod -R u+w \"$extensions_dir\"" + return 1 fi - log_info "✅ [完成] 增强权限修复完成" + log_info "✅ [完成] 权限修复完成,所有验证通过" + return 0 } # 🚀 启动时权限预检查和修复(新增函数) @@ -671,502 +592,30 @@ startup_permissions_check() { needs_fix=true fi - # 如果检测到权限问题,立即执行修复 + # 如果检测到权限问题,调用简化的权限修复函数 if $needs_fix; then - log_info "🔧 [预修复] 检测到权限问题,立即执行用户提供的权限修复命令..." - - # 执行用户提供的核心权限修复命令 - sudo chown -R "$(whoami)" "$cursor_support_dir" 2>/dev/null || true - sudo chown -R "$(whoami)" "$cursor_home_dir" 2>/dev/null || true - chmod -R u+w "$cursor_support_dir" 2>/dev/null || true - - # 确保extensions目录存在并设置权限 - mkdir -p "$cursor_home_dir/extensions" 2>/dev/null || true - chmod -R u+w "$cursor_home_dir/extensions" 2>/dev/null || true - - log_info "✅ [预修复] 启动时权限预修复完成" + log_info "🔧 [预修复] 检测到权限问题,调用权限修复..." + ensure_cursor_directory_permissions else - log_info "✅ [启动检查] 权限检查通过,无需预修复" + log_info "✅ [启动检查] 权限检查通过,无需修复" fi } -# 🚨 关键权限修复函数(用户要求的核心修复) +# 🚨 关键权限修复函数(简化版本,调用统一权限修复) fix_cursor_permissions_critical() { - log_info "🚨 [关键权限修复] 执行用户要求的关键权限修复..." - - local cursor_support_dir="$HOME/Library/Application Support/Cursor" - local cursor_home_dir="$HOME/.cursor" - local success=true - - # 🔧 第一步:执行用户明确要求的核心权限修复命令 - log_info "🔧 [核心命令] 执行用户提供的核心权限修复命令..." - - # 用户提供的第一个命令:sudo chown -R $(whoami) ~/Library/"Application Support"/Cursor - log_info "🔑 [命令1] 执行: sudo chown -R \$(whoami) ~/Library/\"Application Support\"/Cursor" - if sudo chown -R "$(whoami)" "$cursor_support_dir" 2>/dev/null; then - log_info "✅ [成功] Application Support/Cursor 目录所有权修复成功" - else - log_error "❌ [失败] Application Support/Cursor 目录所有权修复失败" - success=false - fi - - # 用户提供的第二个命令:sudo chown -R $(whoami) ~/.cursor - log_info "🔑 [命令2] 执行: sudo chown -R \$(whoami) ~/.cursor" - if sudo chown -R "$(whoami)" "$cursor_home_dir" 2>/dev/null; then - log_info "✅ [成功] .cursor 目录所有权修复成功" - else - log_error "❌ [失败] .cursor 目录所有权修复失败" - success=false - fi - - # 🔓 第二步:执行用户提供的写入权限修复命令 - log_info "🔓 [写入权限] 执行用户提供的写入权限修复命令..." - - # 用户提供的第三个命令:chmod -R u+w ~/Library/"Application Support"/Cursor - log_info "🔓 [命令3] 执行: chmod -R u+w ~/Library/\"Application Support\"/Cursor" - if chmod -R u+w "$cursor_support_dir" 2>/dev/null; then - log_info "✅ [成功] Application Support/Cursor 写入权限设置成功" - else - log_warn "⚠️ [警告] Application Support/Cursor 写入权限设置失败" - fi - - # 用户提供的第四个命令:chmod -R u+w ~/.cursor/extensions - log_info "🔓 [命令4] 执行: chmod -R u+w ~/.cursor/extensions" - if [ -d "$cursor_home_dir/extensions" ]; then - if chmod -R u+w "$cursor_home_dir/extensions" 2>/dev/null; then - log_info "✅ [成功] .cursor/extensions 写入权限设置成功" - else - log_warn "⚠️ [警告] .cursor/extensions 写入权限设置失败" - fi - else - # 如果extensions目录不存在,创建它 - mkdir -p "$cursor_home_dir/extensions" 2>/dev/null || true - chmod -R u+w "$cursor_home_dir/extensions" 2>/dev/null || true - log_info "✅ [创建] .cursor/extensions 目录已创建并设置权限" - fi - - # 🎯 第三步:特别处理logs目录(解决用户报告的具体错误) - log_info "🎯 [logs特殊] 特别处理logs目录权限(解决EACCES错误)..." - local logs_dir="$cursor_support_dir/logs" - - # 确保logs目录存在并有正确权限 - sudo mkdir -p "$logs_dir" 2>/dev/null || true - sudo chown -R "$(whoami)" "$logs_dir" 2>/dev/null || true - chmod -R u+w "$logs_dir" 2>/dev/null || true - chmod 755 "$logs_dir" 2>/dev/null || true - - # 测试logs目录的时间戳子目录创建权限(模拟Cursor行为) - local test_timestamp_dir="$logs_dir/test_$(date +%Y%m%dT%H%M%S)" - if mkdir -p "$test_timestamp_dir" 2>/dev/null; then - log_info "✅ [logs测试] logs目录时间戳子目录创建权限正常" - rmdir "$test_timestamp_dir" 2>/dev/null || true - else - log_warn "⚠️ [logs测试] logs目录时间戳子目录创建权限异常,执行强制修复..." - - # 强制修复logs目录 - sudo rm -rf "$logs_dir" 2>/dev/null || true - sudo mkdir -p "$logs_dir" 2>/dev/null || true - sudo chown "$(whoami):staff" "$logs_dir" 2>/dev/null || true - sudo chmod 755 "$logs_dir" 2>/dev/null || true - - # 再次测试 - if mkdir -p "$test_timestamp_dir" 2>/dev/null; then - log_info "✅ [logs强制修复] 强制修复后logs目录权限正常" - rmdir "$test_timestamp_dir" 2>/dev/null || true - else - log_error "❌ [logs强制修复] 强制修复后logs目录权限仍然异常" - success=false - fi - fi - - # 🔍 第四步:验证权限修复结果 - log_info "🔍 [验证] 验证权限修复结果..." - - local verification_passed=true - - # 验证主目录权限 - if [ -w "$cursor_support_dir" ]; then - log_info "✅ [验证] Application Support/Cursor 目录可写" - else - log_warn "⚠️ [验证] Application Support/Cursor 目录不可写" - verification_passed=false - fi - - if [ -w "$cursor_home_dir" ]; then - log_info "✅ [验证] .cursor 目录可写" - else - log_warn "⚠️ [验证] .cursor 目录不可写" - verification_passed=false - fi - - # 验证logs目录权限 - if [ -w "$logs_dir" ]; then - log_info "✅ [验证] logs 目录可写" - else - log_warn "⚠️ [验证] logs 目录不可写" - verification_passed=false - fi - - # 验证extensions目录权限 - if [ -w "$cursor_home_dir/extensions" ]; then - log_info "✅ [验证] extensions 目录可写" - else - log_warn "⚠️ [验证] extensions 目录不可写" - verification_passed=false - fi - - # 🎉 第五步:显示修复结果 - if $success && $verification_passed; then - log_info "✅ [完成] 关键权限修复完成,所有验证通过" - log_info "💡 [结果] Cursor应用现在应该能够正常启动,不会出现EACCES错误" - return 0 - else - log_warn "⚠️ [警告] 关键权限修复部分失败或验证未通过" - log_info "💡 [手动修复] 如果Cursor启动仍有问题,请手动执行以下命令:" - echo " sudo chown -R \$(whoami) \"$HOME/Library/Application Support/Cursor\"" - echo " sudo chown -R \$(whoami) \"$HOME/.cursor\"" - echo " chmod -R u+w \"$HOME/Library/Application Support/Cursor\"" - echo " chmod -R u+w \"$HOME/.cursor/extensions\"" - return 1 - fi + log_info "🚨 [关键权限修复] 调用简化权限修复函数..." + ensure_cursor_directory_permissions } -# 🚀 Cursor启动前权限最终确保(增强版) +# 🚀 Cursor启动前权限最终确保(简化版本) ensure_cursor_startup_permissions() { - log_info "🚀 [启动前权限] 确保Cursor启动前权限正确(增强版)..." - - local cursor_support_dir="$HOME/Library/Application Support/Cursor" - local cursor_home_dir="$HOME/.cursor" - local current_user=$(whoami) - - # 关键启动目录 - local startup_dirs=( - "$cursor_support_dir" - "$cursor_support_dir/logs" - "$cursor_support_dir/CachedData" - "$cursor_support_dir/User" - "$cursor_support_dir/User/globalStorage" - "$cursor_home_dir" - "$cursor_home_dir/extensions" - ) - - # 🔧 第一步:基础权限确保 - log_info "🔧 [基础权限] 确保基础权限设置..." - for dir in "${startup_dirs[@]}"; do - # 确保目录存在 - sudo mkdir -p "$dir" 2>/dev/null || true - - # 设置正确的所有权和权限 - sudo chown "$current_user:staff" "$dir" 2>/dev/null || true - sudo chmod 755 "$dir" 2>/dev/null || true - - # 验证权限 - if [ -w "$dir" ]; then - log_info "✅ [基础权限] ${dir/$HOME/\~} 权限正确" - else - log_warn "⚠️ [基础权限] ${dir/$HOME/\~} 权限异常,尝试强制修复..." - sudo chown -R "$current_user:staff" "$dir" 2>/dev/null || true - sudo chmod -R 755 "$dir" 2>/dev/null || true - fi - done - - # 🚀 第二步:应用macOS高级权限处理 - log_info "🚀 [高级权限] 应用macOS特有的高级权限处理..." - for dir in "${startup_dirs[@]}"; do - if [ -d "$dir" ]; then - log_info "🔧 [高级处理] 处理目录: ${dir/$HOME/\~}" - apply_macos_advanced_permissions "$dir" || log_warn "⚠️ [高级处理] 高级权限处理失败: ${dir/$HOME/\~}" - fi - done - - # 🎯 第三步:特别处理logs目录 - local logs_dir="$cursor_support_dir/logs" - log_info "🎯 [logs特殊] 特别确保logs目录权限(增强版)..." - - # 删除并重新创建logs目录以确保权限正确 - sudo rm -rf "$logs_dir" 2>/dev/null || true - sudo mkdir -p "$logs_dir" 2>/dev/null || true - sudo chown "$current_user:staff" "$logs_dir" 2>/dev/null || true - sudo chmod 755 "$logs_dir" 2>/dev/null || true - - # 应用高级权限到logs目录 - if apply_macos_advanced_permissions "$logs_dir"; then - log_info "✅ [logs高级] logs目录高级权限处理成功" - else - log_warn "⚠️ [logs高级] logs目录高级权限处理失败" - fi - - # 🧪 第四步:模拟Cursor启动行为测试 - log_info "🧪 [启动模拟] 模拟Cursor启动行为测试..." - - # 模拟Cursor创建时间戳目录的行为 - local timestamp_dir="$logs_dir/startup_test_$(date +%Y%m%dT%H%M%S)" - if mkdir -p "$timestamp_dir" 2>/dev/null; then - log_info "✅ [启动模拟] 时间戳目录创建测试成功" - - # 测试在时间戳目录中创建文件 - local test_log_file="$timestamp_dir/startup.log" - if touch "$test_log_file" 2>/dev/null; then - log_info "✅ [启动模拟] 启动日志文件创建测试成功" - rm -f "$test_log_file" 2>/dev/null || true - else - log_warn "⚠️ [启动模拟] 启动日志文件创建测试失败" - fi - - rmdir "$timestamp_dir" 2>/dev/null || true - else - log_error "❌ [启动模拟] 时间戳目录创建测试失败" - - # 最后的强制修复尝试 - log_info "🔧 [最后修复] 执行最后的强制修复..." - sudo rm -rf "$cursor_support_dir" 2>/dev/null || true - sudo mkdir -p "$cursor_support_dir/logs" 2>/dev/null || true - sudo mkdir -p "$cursor_support_dir/User/globalStorage" 2>/dev/null || true - sudo chown -R "$current_user:staff" "$cursor_support_dir" 2>/dev/null || true - sudo chmod -R 755 "$cursor_support_dir" 2>/dev/null || true - - # 再次应用高级权限 - apply_macos_advanced_permissions "$cursor_support_dir/logs" - - # 再次测试 - if mkdir -p "$timestamp_dir" 2>/dev/null; then - log_info "✅ [最后修复] 强制修复后测试成功" - rmdir "$timestamp_dir" 2>/dev/null || true - else - log_error "❌ [最后修复] 强制修复后测试仍然失败" - fi - fi - - log_info "✅ [启动前权限] Cursor启动前权限确保完成(增强版)" -} - -# 🔧 macOS特有的深入权限处理(新增核心函数) -apply_macos_advanced_permissions() { - local target_dir="$1" - local current_user=$(whoami) - - log_info "🔧 [高级权限] 开始macOS特有的深入权限处理: ${target_dir/$HOME/\~}" - - # 🧹 第一步:清理扩展属性 - log_info "🧹 [扩展属性] 清理可能干扰权限的扩展属性..." - if xattr -cr "$target_dir" 2>/dev/null; then - log_info "✅ [扩展属性] 扩展属性清理成功" - else - log_warn "⚠️ [扩展属性] 扩展属性清理失败或无需清理" - fi - - # 🔐 第二步:设置ACL权限 - log_info "🔐 [ACL权限] 设置访问控制列表权限..." - - # 为当前用户设置完整的ACL权限,包括继承 - local acl_rule="user:$current_user allow read,write,execute,delete,add_file,add_subdirectory,inherit" - if chmod +a "$acl_rule" "$target_dir" 2>/dev/null; then - log_info "✅ [ACL权限] 用户ACL权限设置成功" - else - log_warn "⚠️ [ACL权限] 用户ACL权限设置失败,可能已存在或不支持" - fi - - # 为staff组设置ACL权限 - local staff_acl_rule="group:staff allow read,write,execute,add_file,add_subdirectory,inherit" - if chmod +a "$staff_acl_rule" "$target_dir" 2>/dev/null; then - log_info "✅ [ACL权限] staff组ACL权限设置成功" - else - log_warn "⚠️ [ACL权限] staff组ACL权限设置失败,可能已存在或不支持" - fi - - # 🔄 第三步:刷新权限缓存 - log_info "🔄 [权限缓存] 刷新系统权限缓存..." - if sudo dscacheutil -flushcache 2>/dev/null; then - log_info "✅ [权限缓存] 系统权限缓存刷新成功" - else - log_warn "⚠️ [权限缓存] 系统权限缓存刷新失败" - fi - - # 刷新目录服务缓存 - if sudo killall -HUP DirectoryService 2>/dev/null; then - log_info "✅ [目录服务] 目录服务缓存刷新成功" - else - log_warn "⚠️ [目录服务] 目录服务缓存刷新失败或不需要" - fi - - # ⏰ 第四步:等待权限缓存更新 - log_info "⏰ [等待] 等待权限缓存更新生效..." - sleep 2 - - # 🧪 第五步:权限验证测试 - log_info "🧪 [验证] 执行权限验证测试..." - - # 测试基础读写权限 - local test_file="$target_dir/.permission_test_$(date +%s)" - if touch "$test_file" 2>/dev/null; then - log_info "✅ [验证] 基础文件创建权限正常" - rm -f "$test_file" 2>/dev/null || true - else - log_error "❌ [验证] 基础文件创建权限异常" - return 1 - fi - - # 测试子目录创建权限(模拟Cursor行为) - local test_subdir="$target_dir/test_subdir_$(date +%s)" - if mkdir -p "$test_subdir" 2>/dev/null; then - log_info "✅ [验证] 子目录创建权限正常" - - # 测试子目录中的文件创建 - local test_subfile="$test_subdir/test_file" - if touch "$test_subfile" 2>/dev/null; then - log_info "✅ [验证] 子目录文件创建权限正常" - rm -f "$test_subfile" 2>/dev/null || true - else - log_warn "⚠️ [验证] 子目录文件创建权限异常" - fi - - rmdir "$test_subdir" 2>/dev/null || true - else - log_error "❌ [验证] 子目录创建权限异常" - return 1 - fi - - log_info "✅ [高级权限] macOS特有的深入权限处理完成" - return 0 -} - -# 🛡️ 增强的Cursor权限完整修复(新增函数) -ensure_cursor_complete_permissions() { - log_info "🛡️ [完整权限] 开始Cursor权限完整修复..." - - local cursor_support_dir="$HOME/Library/Application Support/Cursor" - local cursor_home_dir="$HOME/.cursor" - local current_user=$(whoami) - - # 关键目录列表 - local critical_dirs=( - "$cursor_support_dir" - "$cursor_support_dir/logs" - "$cursor_support_dir/User" - "$cursor_support_dir/User/globalStorage" - "$cursor_home_dir" - "$cursor_home_dir/extensions" - ) - - # 🚨 关键修复:强制执行用户要求的权限修复命令 - log_info "🚨 [关键修复] 执行用户要求的核心权限修复命令..." - - # 执行用户明确要求的权限修复命令 - if sudo chown -R "$(whoami)" "$HOME/Library/Application Support/Cursor" 2>/dev/null; then - log_info "✅ [核心修复] sudo chown Application Support/Cursor 执行成功" - else - log_error "❌ [核心修复] sudo chown Application Support/Cursor 执行失败" - fi - - if sudo chown -R "$(whoami)" "$HOME/.cursor" 2>/dev/null; then - log_info "✅ [核心修复] sudo chown .cursor 执行成功" - else - log_error "❌ [核心修复] sudo chown .cursor 执行失败" - fi - - # 🔧 第一步:基础权限修复 - log_info "🔧 [基础权限] 执行基础权限修复..." + log_info "🚀 [启动前权限] 调用简化权限修复函数..." ensure_cursor_directory_permissions +} - # 🚀 第二步:高级权限处理 - log_info "🚀 [高级权限] 执行macOS特有的高级权限处理..." - - for dir in "${critical_dirs[@]}"; do - if [ -d "$dir" ]; then - log_info "🔧 [处理] 处理目录: ${dir/$HOME/\~}" - if ! apply_macos_advanced_permissions "$dir"; then - log_warn "⚠️ [警告] 目录高级权限处理失败: ${dir/$HOME/\~}" - fi - else - log_warn "⚠️ [跳过] 目录不存在: ${dir/$HOME/\~}" - fi - done - - # 🎯 第三步:特别处理logs目录 - log_info "🎯 [logs特殊] 特别处理logs目录权限..." - local logs_dir="$cursor_support_dir/logs" - - # 确保logs目录存在 - sudo mkdir -p "$logs_dir" 2>/dev/null || true - sudo chown "$current_user:staff" "$logs_dir" 2>/dev/null || true - sudo chmod 755 "$logs_dir" 2>/dev/null || true - - # 应用高级权限 - if apply_macos_advanced_permissions "$logs_dir"; then - log_info "✅ [logs特殊] logs目录高级权限处理成功" - else - log_warn "⚠️ [logs特殊] logs目录高级权限处理失败" - fi - - # 🧪 第四步:模拟Cursor行为测试 - log_info "🧪 [Cursor模拟] 模拟Cursor应用行为测试..." - - # 模拟Cursor创建时间戳目录的行为 - local timestamp_dir="$logs_dir/test_$(date +%Y%m%dT%H%M%S)" - if mkdir -p "$timestamp_dir" 2>/dev/null; then - log_info "✅ [Cursor模拟] 时间戳目录创建测试成功" - - # 测试在时间戳目录中创建文件 - local test_log_file="$timestamp_dir/test.log" - if touch "$test_log_file" 2>/dev/null; then - log_info "✅ [Cursor模拟] 日志文件创建测试成功" - rm -f "$test_log_file" 2>/dev/null || true - else - log_warn "⚠️ [Cursor模拟] 日志文件创建测试失败" - fi - - rmdir "$timestamp_dir" 2>/dev/null || true - else - log_error "❌ [Cursor模拟] 时间戳目录创建测试失败" - - # 如果模拟失败,尝试最后的强制修复 - log_info "🔧 [最后修复] 执行最后的强制权限修复..." - sudo rm -rf "$logs_dir" 2>/dev/null || true - sudo mkdir -p "$logs_dir" 2>/dev/null || true - sudo chown "$current_user:staff" "$logs_dir" 2>/dev/null || true - sudo chmod 755 "$logs_dir" 2>/dev/null || true - - # 再次应用高级权限 - apply_macos_advanced_permissions "$logs_dir" - - # 再次测试 - if mkdir -p "$timestamp_dir" 2>/dev/null; then - log_info "✅ [最后修复] 强制修复后测试成功" - rmdir "$timestamp_dir" 2>/dev/null || true - else - log_error "❌ [最后修复] 强制修复后测试仍然失败" - return 1 - fi - fi - - # 🔍 第五步:最终权限诊断 - log_info "🔍 [最终诊断] 执行最终权限诊断..." - - echo "📋 [权限报告] 最终权限状态:" - echo "----------------------------------------" - for dir in "${critical_dirs[@]}"; do - if [ -d "$dir" ]; then - local perms=$(ls -ld "$dir" | awk '{print $1}') - local owner=$(ls -ld "$dir" | awk '{print $3":"$4}') - # 检查ACL权限 - local acl_info="" - if ls -le "$dir" 2>/dev/null | grep -q "user:$current_user"; then - acl_info=" [ACL:✅]" - else - acl_info=" [ACL:❌]" - fi - echo "✅ ${dir/$HOME/\~}: $perms $owner$acl_info" - else - echo "❌ ${dir/$HOME/\~}: 不存在" - fi - done - - log_info "✅ [完整权限] Cursor权限完整修复完成" - return 0 -} # 🛠️ 修改机器码配置(增强版) modify_machine_code_config() { @@ -1381,11 +830,8 @@ except Exception as e: log_warn "⚠️ [警告] 无法设置配置文件只读保护" fi - # 🛡️ 关键修复:执行完整的权限修复(包含macOS高级权限处理) - ensure_cursor_complete_permissions - - # 🚨 额外的关键权限修复(用户要求的核心修复) - fix_cursor_permissions_critical + # 🛡️ 关键修复:执行权限修复 + ensure_cursor_directory_permissions echo log_info "🎉 [成功] 机器码配置修改完成!" @@ -1406,8 +852,7 @@ except Exception as e: # 恢复备份并确保权限正确 if cp "$backup_path" "$config_path"; then chmod 644 "$config_path" 2>/dev/null || true - ensure_cursor_complete_permissions - fix_cursor_permissions_critical + ensure_cursor_directory_permissions log_info "✅ [恢复] 已恢复原始配置并修复权限" else log_error "❌ [错误] 恢复备份失败" @@ -1424,8 +869,7 @@ except Exception as e: log_info "🔄 [恢复] 正在恢复备份配置并修复权限..." if cp "$backup_path" "$config_path"; then chmod 644 "$config_path" 2>/dev/null || true - ensure_cursor_complete_permissions - fix_cursor_permissions_critical + ensure_cursor_directory_permissions log_info "✅ [恢复] 已恢复原始配置并修复权限" else log_error "❌ [错误] 恢复备份失败" @@ -3575,8 +3019,7 @@ main() { echo log_info "🛡️ [权限修复] 执行仅修改模式的权限修复..." log_info "💡 [说明] 确保Cursor应用能够正常启动,无权限错误" - ensure_cursor_complete_permissions - fix_cursor_permissions_critical + ensure_cursor_directory_permissions # 🔧 关键修复:修复应用签名问题(防止"应用已损坏"错误) echo @@ -3675,31 +3118,12 @@ main() { log_info "🛡️ [最终权限修复] 执行脚本完成前的最终权限修复..." log_info "💡 [说明] 确保Cursor应用能够正常启动,无权限错误" - # 执行完整的权限修复 - ensure_cursor_complete_permissions - - # 执行用户要求的关键权限修复 - fix_cursor_permissions_critical - - # 额外的权限验证和修复 - log_info "🔍 [最终验证] 执行最终权限验证..." - local cursor_support_dir="$HOME/Library/Application Support/Cursor" - local cursor_home_dir="$HOME/.cursor" - - # 确保关键目录可写 - if [ ! -w "$cursor_support_dir" ] || [ ! -w "$cursor_home_dir" ]; then - log_warn "⚠️ [权限警告] 检测到权限问题,执行紧急修复..." - - # 紧急权限修复 - sudo chown -R "$(whoami)" "$cursor_support_dir" 2>/dev/null || true - sudo chown -R "$(whoami)" "$cursor_home_dir" 2>/dev/null || true - chmod -R u+w "$cursor_support_dir" 2>/dev/null || true - chmod -R u+w "$cursor_home_dir" 2>/dev/null || true + # 执行权限修复 + ensure_cursor_directory_permissions - log_info "✅ [紧急修复] 紧急权限修复完成" - else - log_info "✅ [权限验证] 最终权限验证通过" - fi + # 最终权限修复确保 + log_info "🔍 [最终修复] 执行最终权限修复确保..." + ensure_cursor_directory_permissions # 🎉 脚本执行完成 log_info "🎉 [完成] 所有操作已完成!"