mirror of
https://github.com/yuaotian/go-cursor-help.git
synced 2025-08-02 13:57:35 +08:00
增强Cursor目录权限管理功能,新增确保目录权限正确的函数,优化了配置文件生成后的权限检查和恢复机制。确保在修改过程中提供清晰的操作反馈,提升了用户体验和脚本的安全性。同时,修复了Python执行结果解析和验证逻辑,确保修改成功后配置文件的只读保护有效。
This commit is contained in:
parent
874dc94792
commit
0e03ee274e
@ -213,6 +213,10 @@ remove_cursor_trial_folders() {
|
|||||||
log_info "✅ [完成] 深度权限修复完成"
|
log_info "✅ [完成] 深度权限修复完成"
|
||||||
echo
|
echo
|
||||||
|
|
||||||
|
# 🔧 额外修复:再次调用统一权限修复函数确保一致性
|
||||||
|
log_info "🔧 [额外修复] 使用统一权限修复函数进行最终确认..."
|
||||||
|
ensure_cursor_directory_permissions
|
||||||
|
|
||||||
# 显示操作统计
|
# 显示操作统计
|
||||||
log_info "📊 [统计] 操作完成统计:"
|
log_info "📊 [统计] 操作完成统计:"
|
||||||
echo " ✅ 成功删除: $deleted_count 个文件夹"
|
echo " ✅ 成功删除: $deleted_count 个文件夹"
|
||||||
@ -299,8 +303,14 @@ restart_cursor_and_wait() {
|
|||||||
|
|
||||||
if [ -f "$config_path" ]; then
|
if [ -f "$config_path" ]; then
|
||||||
log_info "✅ [成功] 配置文件已生成: $config_path"
|
log_info "✅ [成功] 配置文件已生成: $config_path"
|
||||||
|
|
||||||
|
# 🛡️ 关键修复:配置文件生成后立即确保权限正确
|
||||||
|
ensure_cursor_directory_permissions
|
||||||
else
|
else
|
||||||
log_warn "⚠️ [警告] 配置文件未在预期时间内生成,继续执行..."
|
log_warn "⚠️ [警告] 配置文件未在预期时间内生成,继续执行..."
|
||||||
|
|
||||||
|
# 即使配置文件未生成,也要确保目录权限正确
|
||||||
|
ensure_cursor_directory_permissions
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 强制关闭Cursor
|
# 强制关闭Cursor
|
||||||
@ -424,7 +434,58 @@ start_cursor_to_generate_config() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# 🛠️ 修改机器码配置(增强版)
|
# <20>️ 确保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目录权限修复完成"
|
||||||
|
}
|
||||||
|
|
||||||
|
# <20>🛠️ 修改机器码配置(增强版)
|
||||||
modify_machine_code_config() {
|
modify_machine_code_config() {
|
||||||
local mode=${1:-"FULL"}
|
local mode=${1:-"FULL"}
|
||||||
|
|
||||||
@ -568,9 +629,33 @@ except Exception as e:
|
|||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
" 2>&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 - 验证修改结果..."
|
log_info "⏳ [进度] 5/5 - 验证修改结果..."
|
||||||
|
|
||||||
|
# 🔒 关键修复:在验证前确保文件权限正确
|
||||||
|
chmod 644 "$config_path" 2>/dev/null || true
|
||||||
|
|
||||||
# 验证修改是否成功
|
# 验证修改是否成功
|
||||||
local verification_result=$(python3 -c "
|
local verification_result=$(python3 -c "
|
||||||
import json
|
import json
|
||||||
@ -602,8 +687,20 @@ except Exception as e:
|
|||||||
print(f'VERIFICATION_ERROR: {e}')
|
print(f'VERIFICATION_ERROR: {e}')
|
||||||
" 2>&1)
|
" 2>&1)
|
||||||
|
|
||||||
if [[ "$verification_result" == "VERIFICATION_SUCCESS" ]]; then
|
# 检查验证结果(忽略其他输出,只关注最终结果)
|
||||||
|
if echo "$verification_result" | grep -q "VERIFICATION_SUCCESS"; then
|
||||||
log_info "✅ [进度] 5/5 - 修改验证成功"
|
log_info "✅ [进度] 5/5 - 修改验证成功"
|
||||||
|
|
||||||
|
# 🔐 关键修复:设置配置文件为只读保护
|
||||||
|
if chmod 444 "$config_path" 2>/dev/null; then
|
||||||
|
log_info "🔐 [保护] 配置文件已设置为只读保护"
|
||||||
|
else
|
||||||
|
log_warn "⚠️ [警告] 无法设置配置文件只读保护"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 🛡️ 关键修复:确保目录权限正确
|
||||||
|
ensure_cursor_directory_permissions
|
||||||
|
|
||||||
echo
|
echo
|
||||||
log_info "🎉 [成功] 机器码配置修改完成!"
|
log_info "🎉 [成功] 机器码配置修改完成!"
|
||||||
log_info "📋 [详情] 已更新以下标识符:"
|
log_info "📋 [详情] 已更新以下标识符:"
|
||||||
@ -615,20 +712,33 @@ except Exception as e:
|
|||||||
log_info "💾 [备份] 原配置已备份至: $backup_name"
|
log_info "💾 [备份] 原配置已备份至: $backup_name"
|
||||||
return 0
|
return 0
|
||||||
else
|
else
|
||||||
log_error "❌ [错误] 修改验证失败: $verification_result"
|
log_error "❌ [错误] 修改验证失败"
|
||||||
log_info "🔄 [恢复] 正在恢复备份..."
|
log_info "💡 [验证详情]:"
|
||||||
cp "$backup_path" "$config_path"
|
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
|
return 1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
log_error "❌ [错误] 修改配置失败: $python_result"
|
log_error "❌ [错误] 修改配置失败"
|
||||||
log_info "💡 [调试信息] Python执行结果: $python_result"
|
log_info "💡 [调试信息] Python执行详情:"
|
||||||
|
echo "$python_result"
|
||||||
|
|
||||||
# 尝试恢复备份
|
# 尝试恢复备份并修复权限
|
||||||
if [ -f "$backup_path" ]; then
|
if [ -f "$backup_path" ]; then
|
||||||
log_info "🔄 [恢复] 正在恢复备份配置..."
|
log_info "🔄 [恢复] 正在恢复备份配置并修复权限..."
|
||||||
if cp "$backup_path" "$config_path"; then
|
if cp "$backup_path" "$config_path"; then
|
||||||
log_info "✅ [恢复] 已恢复原始配置"
|
chmod 644 "$config_path" 2>/dev/null || true
|
||||||
|
ensure_cursor_directory_permissions
|
||||||
|
log_info "✅ [恢复] 已恢复原始配置并修复权限"
|
||||||
else
|
else
|
||||||
log_error "❌ [错误] 恢复备份失败"
|
log_error "❌ [错误] 恢复备份失败"
|
||||||
fi
|
fi
|
||||||
|
139
scripts/test/test_cursor_permissions.sh
Normal file
139
scripts/test/test_cursor_permissions.sh
Normal file
@ -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 "$@"
|
Loading…
x
Reference in New Issue
Block a user