go-cursor-help-v2/scripts/fix/cursor_permission_fix.sh

285 lines
9.9 KiB
Bash
Raw 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
# Cursor权限问题专用修复脚本
# 专门解决macOS环境下Cursor权限错误问题
# 错误类型EACCES: permission denied, mkdir '/Users/xxx/Library/Application Support/Cursor/logs/xxx'
# 颜色定义
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"
}
# 获取当前用户信息
CURRENT_USER=$(whoami)
CURSOR_SUPPORT_DIR="$HOME/Library/Application Support/Cursor"
CURSOR_HOME_DIR="$HOME/.cursor"
# 权限诊断函数
diagnose_permissions() {
echo
log_info "🔍 [诊断] 开始权限诊断..."
# 检查目录列表
local directories=(
"$CURSOR_SUPPORT_DIR"
"$CURSOR_SUPPORT_DIR/User"
"$CURSOR_SUPPORT_DIR/User/globalStorage"
"$CURSOR_SUPPORT_DIR/logs"
"$CURSOR_SUPPORT_DIR/CachedData"
"$CURSOR_HOME_DIR"
"$CURSOR_HOME_DIR/extensions"
)
local issues_found=false
echo
echo "📋 [权限状态] 当前权限状态:"
echo "----------------------------------------"
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 [ "$owner" = "$CURRENT_USER" ] && [ -w "$dir" ]; then
echo -e "$dir"
echo -e " 权限: $perms | 所有者: $owner:$group | 状态: 正常"
else
echo -e "$dir"
echo -e " 权限: $perms | 所有者: $owner:$group | 状态: 异常"
issues_found=true
fi
else
echo -e "$dir (不存在)"
issues_found=true
fi
echo
done
# 特别检查logs目录
local logs_dir="$CURSOR_SUPPORT_DIR/logs"
echo "🎯 [logs目录] 特别检查logs目录"
echo "----------------------------------------"
if [ -d "$logs_dir" ]; then
# 测试创建子目录
local test_subdir="$logs_dir/test_$(date +%s)"
if mkdir -p "$test_subdir" 2>/dev/null; then
echo -e "✅ logs目录可以创建子目录"
rmdir "$test_subdir" 2>/dev/null || true
else
echo -e "❌ logs目录无法创建子目录 - 这是问题根源!"
issues_found=true
fi
else
echo -e "❌ logs目录不存在"
issues_found=true
fi
echo
if [ "$issues_found" = true ]; then
log_error "❌ [诊断结果] 发现权限问题"
return 1
else
log_info "✅ [诊断结果] 权限状态正常"
return 0
fi
}
# 强制权限修复函数
force_fix_permissions() {
echo
log_info "🔧 [强制修复] 开始强制权限修复..."
# 关闭所有Cursor进程
log_info "🔄 [关闭进程] 关闭所有Cursor进程..."
pkill -f "Cursor" 2>/dev/null || true
sleep 2
# 完全删除并重新创建目录结构
log_info "🗑️ [重建] 删除并重新创建目录结构..."
# 备份重要文件
local backup_dir="/tmp/cursor_backup_$(date +%s)"
if [ -d "$CURSOR_SUPPORT_DIR/User/globalStorage" ]; then
log_info "💾 [备份] 备份配置文件..."
mkdir -p "$backup_dir"
cp -R "$CURSOR_SUPPORT_DIR/User/globalStorage" "$backup_dir/" 2>/dev/null || true
fi
# 删除目录
sudo rm -rf "$CURSOR_SUPPORT_DIR" 2>/dev/null || true
sudo rm -rf "$CURSOR_HOME_DIR" 2>/dev/null || true
# 重新创建目录结构
log_info "📁 [创建] 重新创建目录结构..."
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"
)
for dir in "${directories[@]}"; 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
done
# 恢复备份的配置文件
if [ -d "$backup_dir/globalStorage" ]; then
log_info "🔄 [恢复] 恢复配置文件..."
cp -R "$backup_dir/globalStorage"/* "$CURSOR_SUPPORT_DIR/User/globalStorage/" 2>/dev/null || true
sudo chown -R "$CURRENT_USER:staff" "$CURSOR_SUPPORT_DIR/User/globalStorage" 2>/dev/null || true
sudo chmod -R 644 "$CURSOR_SUPPORT_DIR/User/globalStorage"/*.json 2>/dev/null || true
fi
# 设置最终权限
log_info "🔐 [权限] 设置最终权限..."
sudo chown -R "$CURRENT_USER:staff" "$CURSOR_SUPPORT_DIR" 2>/dev/null || true
sudo chown -R "$CURRENT_USER:staff" "$CURSOR_HOME_DIR" 2>/dev/null || true
sudo chmod -R 755 "$CURSOR_SUPPORT_DIR" 2>/dev/null || true
sudo chmod -R 755 "$CURSOR_HOME_DIR" 2>/dev/null || true
# 🚀 macOS高级权限处理
log_info "🚀 [高级权限] 应用macOS特有的高级权限处理..."
# 清理扩展属性
log_info "🧹 [扩展属性] 清理扩展属性..."
xattr -cr "$CURSOR_SUPPORT_DIR" 2>/dev/null || true
xattr -cr "$CURSOR_HOME_DIR" 2>/dev/null || true
# 设置ACL权限
log_info "🔐 [ACL权限] 设置ACL权限..."
chmod +a "user:$CURRENT_USER allow read,write,execute,delete,add_file,add_subdirectory,inherit" "$CURSOR_SUPPORT_DIR" 2>/dev/null || true
chmod +a "user:$CURRENT_USER allow read,write,execute,delete,add_file,add_subdirectory,inherit" "$CURSOR_HOME_DIR" 2>/dev/null || true
chmod +a "user:$CURRENT_USER allow read,write,execute,delete,add_file,add_subdirectory,inherit" "$CURSOR_SUPPORT_DIR/logs" 2>/dev/null || true
# 刷新权限缓存
log_info "🔄 [权限缓存] 刷新系统权限缓存..."
sudo dscacheutil -flushcache 2>/dev/null || true
sudo killall -HUP DirectoryService 2>/dev/null || true
# 等待缓存更新
sleep 2
# 特别确保logs目录权限
log_info "🎯 [logs] 特别确保logs目录权限..."
sudo chown "$CURRENT_USER:staff" "$CURSOR_SUPPORT_DIR/logs" 2>/dev/null || true
sudo chmod 755 "$CURSOR_SUPPORT_DIR/logs" 2>/dev/null || true
# 测试修复效果
local test_subdir="$CURSOR_SUPPORT_DIR/logs/test_$(date +%s)"
if mkdir -p "$test_subdir" 2>/dev/null; then
log_info "✅ [测试] logs目录权限修复成功"
rmdir "$test_subdir" 2>/dev/null || true
else
log_error "❌ [测试] logs目录权限修复失败"
return 1
fi
log_info "✅ [完成] 强制权限修复完成"
# 清理备份
rm -rf "$backup_dir" 2>/dev/null || true
return 0
}
# 主函数
main() {
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} Cursor权限问题专用修复脚本${NC}"
echo -e "${GREEN}========================================${NC}"
echo
echo -e "${BLUE}🎯 [目标]${NC} 解决Cursor权限错误"
echo -e "${BLUE} EACCES: permission denied, mkdir${NC}"
echo -e "${BLUE} '/Users/xxx/Library/Application Support/Cursor/logs/xxx'${NC}"
echo
# 检查是否为macOS
if [[ "$OSTYPE" != "darwin"* ]]; then
log_error "❌ [错误] 此脚本仅适用于macOS系统"
exit 1
fi
# 检查sudo权限
if ! sudo -n true 2>/dev/null; then
log_info "🔑 [权限] 此脚本需要sudo权限来修复目录权限"
echo "请输入您的密码:"
sudo -v
fi
# 执行诊断
if diagnose_permissions; then
echo
log_info "🎉 [结果] 权限状态正常,无需修复"
echo
echo -e "${BLUE}💡 [建议]${NC} 如果Cursor仍有权限错误"
echo -e "${BLUE} 1. 重启Cursor应用${NC}"
echo -e "${BLUE} 2. 重启macOS系统${NC}"
echo -e "${BLUE} 3. 如果问题持续,请运行强制修复${NC}"
else
echo
log_warn "⚠️ [发现问题] 检测到权限问题,开始修复..."
if force_fix_permissions; then
echo
log_info "🎉 [成功] 权限修复完成!"
echo
echo -e "${GREEN}✅ [下一步]${NC} 现在可以:"
echo -e "${GREEN} 1. 启动Cursor应用${NC}"
echo -e "${GREEN} 2. 运行Cursor脚本${NC}"
echo -e "${GREEN} 3. 权限错误应该已经解决${NC}"
else
echo
log_error "❌ [失败] 权限修复失败"
echo
echo -e "${RED}💡 [手动修复]${NC} 请手动执行以下命令:"
echo -e "${RED}sudo rm -rf \"$CURSOR_SUPPORT_DIR\"${NC}"
echo -e "${RED}sudo rm -rf \"$CURSOR_HOME_DIR\"${NC}"
echo -e "${RED}sudo mkdir -p \"$CURSOR_SUPPORT_DIR/logs\"${NC}"
echo -e "${RED}sudo mkdir -p \"$CURSOR_HOME_DIR/extensions\"${NC}"
echo -e "${RED}sudo chown -R $CURRENT_USER:staff \"$CURSOR_SUPPORT_DIR\"${NC}"
echo -e "${RED}sudo chown -R $CURRENT_USER:staff \"$CURSOR_HOME_DIR\"${NC}"
echo -e "${RED}sudo chmod -R 755 \"$CURSOR_SUPPORT_DIR\"${NC}"
echo -e "${RED}sudo chmod -R 755 \"$CURSOR_HOME_DIR\"${NC}"
fi
fi
echo
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 修复完成${NC}"
echo -e "${GREEN}========================================${NC}"
}
# 执行主函数
main "$@"