Skip to content

Commit 26355e2

Browse files
committedMar 14, 2025
增强Cursor ID修改工具的日志记录功能,添加日志初始化和命令输出记录,改进错误处理和用户提示信息,确保用户能够更好地追踪脚本执行过程中的关键操作和状态。
1 parent a63fcac commit 26355e2

File tree

1 file changed

+97
-31
lines changed

1 file changed

+97
-31
lines changed
 

‎scripts/run/cursor_mac_id_modifier.sh

+97-31
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,51 @@
33
# 设置错误处理
44
set -e
55

6+
# 定义日志文件路径
7+
LOG_FILE="/tmp/cursor_mac_id_modifier.log"
8+
9+
# 初始化日志文件
10+
initialize_log() {
11+
echo "========== Cursor ID 修改工具日志开始 $(date) ==========" > "$LOG_FILE"
12+
chmod 644 "$LOG_FILE"
13+
}
14+
615
# 颜色定义
716
RED='\033[0;31m'
817
GREEN='\033[0;32m'
918
YELLOW='\033[1;33m'
1019
BLUE='\033[0;34m'
1120
NC='\033[0m' # No Color
1221

13-
# 日志函数
22+
# 日志函数 - 同时输出到终端和日志文件
1423
log_info() {
1524
echo -e "${GREEN}[INFO]${NC} $1"
25+
echo "[INFO] $(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOG_FILE"
1626
}
1727

1828
log_warn() {
1929
echo -e "${YELLOW}[WARN]${NC} $1"
30+
echo "[WARN] $(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOG_FILE"
2031
}
2132

2233
log_error() {
2334
echo -e "${RED}[ERROR]${NC} $1"
35+
echo "[ERROR] $(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOG_FILE"
2436
}
2537

2638
log_debug() {
2739
echo -e "${BLUE}[DEBUG]${NC} $1"
40+
echo "[DEBUG] $(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOG_FILE"
41+
}
42+
43+
# 记录命令输出到日志文件
44+
log_cmd_output() {
45+
local cmd="$1"
46+
local msg="$2"
47+
echo "[CMD] $(date '+%Y-%m-%d %H:%M:%S') 执行命令: $cmd" >> "$LOG_FILE"
48+
echo "[CMD] $msg:" >> "$LOG_FILE"
49+
eval "$cmd" 2>&1 | tee -a "$LOG_FILE"
50+
echo "" >> "$LOG_FILE"
2851
}
2952

3053
# 获取当前用户
@@ -226,15 +249,19 @@ generate_new_config() {
226249

227250
# 修改系统 ID
228251
log_info "正在修改系统 ID..."
252+
echo "[CONFIG] 开始修改系统 ID" >> "$LOG_FILE"
229253

230254
# 备份当前系统 ID
231255
backup_system_id
232256

233257
# 生成新的系统 UUID
234258
local new_system_uuid=$(uuidgen)
259+
echo "[CONFIG] 生成新的系统 UUID: $new_system_uuid" >> "$LOG_FILE"
235260

236261
# 修改系统 UUID
237262
sudo nvram SystemUUID="$new_system_uuid"
263+
echo "[CONFIG] 已设置系统 UUID" >> "$LOG_FILE"
264+
238265
printf "${YELLOW}系统 UUID 已更新为: $new_system_uuid${NC}\n"
239266
printf "${YELLOW}请重启系统以使更改生效${NC}\n"
240267

@@ -247,6 +274,12 @@ generate_new_config() {
247274
local device_id=$(generate_uuid | tr '[:upper:]' '[:lower:]')
248275
local sqm_id="{$(generate_uuid | tr '[:lower:]' '[:upper:]')}"
249276

277+
echo "[CONFIG] 生成的 ID:" >> "$LOG_FILE"
278+
echo "[CONFIG] machine_id: $machine_id" >> "$LOG_FILE"
279+
echo "[CONFIG] mac_machine_id: $mac_machine_id" >> "$LOG_FILE"
280+
echo "[CONFIG] device_id: $device_id" >> "$LOG_FILE"
281+
echo "[CONFIG] sqm_id: $sqm_id" >> "$LOG_FILE"
282+
250283
log_info "正在修改配置文件..."
251284
# 检查配置文件是否存在
252285
if [ ! -f "$STORAGE_FILE" ]; then
@@ -298,6 +331,7 @@ generate_new_config() {
298331
# 修改 Cursor 主程序文件(安全模式)
299332
modify_cursor_app_files() {
300333
log_info "正在安全修改 Cursor 主程序文件..."
334+
log_info "详细日志将记录到: $LOG_FILE"
301335

302336
# 验证应用是否存在
303337
if [ ! -d "$CURSOR_APP_PATH" ]; then
@@ -315,15 +349,20 @@ modify_cursor_app_files() {
315349
local need_modification=false
316350
local missing_files=false
317351

352+
log_debug "检查目标文件..."
318353
for file in "${target_files[@]}"; do
319354
if [ ! -f "$file" ]; then
320355
log_warn "文件不存在: ${file/$CURSOR_APP_PATH\//}"
356+
echo "[FILE_CHECK] 文件不存在: $file" >> "$LOG_FILE"
321357
missing_files=true
322358
continue
323359
fi
324360

361+
echo "[FILE_CHECK] 文件存在: $file ($(wc -c < "$file") 字节)" >> "$LOG_FILE"
362+
325363
if ! grep -q "return crypto.randomUUID()" "$file" 2>/dev/null; then
326364
log_info "文件需要修改: ${file/$CURSOR_APP_PATH\//}"
365+
grep -n "IOPlatformUUID" "$file" | head -3 >> "$LOG_FILE" || echo "[FILE_CHECK] 未找到 IOPlatformUUID" >> "$LOG_FILE"
327366
need_modification=true
328367
break
329368
else
@@ -348,42 +387,59 @@ modify_cursor_app_files() {
348387
local temp_app="${temp_dir}/Cursor.app"
349388
local backup_app="/tmp/Cursor.app.backup_${timestamp}"
350389

390+
log_debug "创建临时目录: $temp_dir"
391+
echo "[TEMP_DIR] 创建临时目录: $temp_dir" >> "$LOG_FILE"
392+
351393
# 清理可能存在的旧临时目录
352394
if [ -d "$temp_dir" ]; then
353395
log_info "清理已存在的临时目录..."
354396
rm -rf "$temp_dir"
355-
fi
397+
}
356398

357399
# 创建新的临时目录
358400
mkdir -p "$temp_dir" || {
359401
log_error "无法创建临时目录: $temp_dir"
402+
echo "[ERROR] 无法创建临时目录: $temp_dir" >> "$LOG_FILE"
360403
return 1
361404
}
362405

363406
# 备份原应用
364407
log_info "备份原应用..."
408+
echo "[BACKUP] 开始备份: $CURSOR_APP_PATH -> $backup_app" >> "$LOG_FILE"
409+
365410
cp -R "$CURSOR_APP_PATH" "$backup_app" || {
366411
log_error "无法创建应用备份"
412+
echo "[ERROR] 备份失败: $CURSOR_APP_PATH -> $backup_app" >> "$LOG_FILE"
367413
rm -rf "$temp_dir"
368414
return 1
369415
}
416+
417+
echo "[BACKUP] 备份完成" >> "$LOG_FILE"
370418

371419
# 复制应用到临时目录
372420
log_info "创建临时工作副本..."
421+
echo "[COPY] 开始复制: $CURSOR_APP_PATH -> $temp_dir" >> "$LOG_FILE"
422+
373423
cp -R "$CURSOR_APP_PATH" "$temp_dir" || {
374424
log_error "无法复制应用到临时目录"
425+
echo "[ERROR] 复制失败: $CURSOR_APP_PATH -> $temp_dir" >> "$LOG_FILE"
375426
rm -rf "$temp_dir" "$backup_app"
376427
return 1
377428
}
429+
430+
echo "[COPY] 复制完成" >> "$LOG_FILE"
378431

379432
# 确保临时目录的权限正确
380433
chown -R "$CURRENT_USER:staff" "$temp_dir"
381434
chmod -R 755 "$temp_dir"
382435

383436
# 移除签名(增强兼容性)
384437
log_info "移除应用签名..."
385-
codesign --remove-signature "$temp_app" || {
438+
echo "[CODESIGN] 移除签名: $temp_app" >> "$LOG_FILE"
439+
440+
codesign --remove-signature "$temp_app" 2>> "$LOG_FILE" || {
386441
log_warn "移除应用签名失败"
442+
echo "[WARN] 移除签名失败: $temp_app" >> "$LOG_FILE"
387443
}
388444

389445
# 移除所有相关组件的签名
@@ -416,50 +472,37 @@ modify_cursor_app_files() {
416472
continue
417473
fi
418474

419-
log_debug "分析文件内容..."
420-
log_debug "文件大小: $(wc -c < "$file") 字节"
421-
422-
# 尝试查找文件中的关键部分
423-
log_debug "搜索关键函数..."
424-
grep -n "IOPlatformUUID" "$file" | head -3 || log_debug "未找到 IOPlatformUUID"
425-
grep -n "function.*getMachineId" "$file" | head -3 || log_debug "未找到 getMachineId 函数"
426-
grep -n "function.*getDeviceId" "$file" | head -3 || log_debug "未找到 getDeviceId 函数"
427-
grep -n "function t\\$" "$file" | head -3 || log_debug "未找到 t$ 函数"
428-
grep -n "function a\\$" "$file" | head -3 || log_debug "未找到 a$ 函数"
429-
430-
# 在出错时捕获更多信息
431-
trap 'log_error "脚本在 $LINENO 行附近失败了,命令: $BASH_COMMAND"; dump_debug_info "$file"' ERR
432-
433-
dump_debug_info() {
434-
local file="$1"
435-
log_debug "=== 调试信息 ==="
436-
log_debug "文件: $file"
437-
log_debug "文件存在: $(test -f "$file" && echo "" || echo "")"
438-
log_debug "文件大小: $(wc -c < "$file" 2>/dev/null || echo "无法读取")"
439-
log_debug "文件权限: $(ls -l "$file" 2>/dev/null || echo "无法获取")"
440-
log_debug "部分内容: $(head -5 "$file" 2>/dev/null | tr '\n' ' ' || echo "无法读取")"
441-
log_debug "================="
442-
}
475+
log_debug "处理文件: ${file/$temp_dir\//}"
476+
echo "[PROCESS] 开始处理文件: $file" >> "$LOG_FILE"
477+
echo "[PROCESS] 文件大小: $(wc -c < "$file") 字节" >> "$LOG_FILE"
478+
479+
# 输出文件部分内容到日志
480+
echo "[FILE_CONTENT] 文件头部 100 行:" >> "$LOG_FILE"
481+
head -100 "$file" 2>/dev/null | grep -v "^$" | head -50 >> "$LOG_FILE"
482+
echo "[FILE_CONTENT] ..." >> "$LOG_FILE"
443483

444484
# 创建文件备份
445485
cp "$file" "${file}.bak" || {
446486
log_error "无法创建文件备份: ${file/$temp_dir\//}"
487+
echo "[ERROR] 无法创建文件备份: $file" >> "$LOG_FILE"
447488
continue
448489
}
449490

450491
# 使用 sed 替换而不是字符串操作
451492
if grep -q "IOPlatformUUID" "$file"; then
452493
log_debug "找到 IOPlatformUUID 关键字"
494+
echo "[FOUND] 找到 IOPlatformUUID 关键字" >> "$LOG_FILE"
495+
grep -n "IOPlatformUUID" "$file" | head -5 >> "$LOG_FILE"
453496

454497
# 定位 IOPlatformUUID 相关函数
455-
if grep -q "function a\\$" "$file"; then
498+
if grep -q "function a\$" "$file"; then
456499
# 针对 main.js 中发现的代码结构进行修改
457500
if sed -i.tmp 's/function a\$(t){switch/function a\$(t){return crypto.randomUUID(); switch/' "$file"; then
458-
log_debug "成功注入 randomUUID 调用到 a$ 函数"
501+
log_debug "成功注入 randomUUID 调用到 a\$ 函数"
459502
((modified_count++))
460503
log_info "成功修改文件: ${file/$temp_dir\//}"
461504
else
462-
log_error "修改 a$ 函数失败"
505+
log_error "修改 a\$ 函数失败"
463506
cp "${file}.bak" "$file"
464507
fi
465508
elif grep -q "async function v5" "$file"; then
@@ -567,8 +610,13 @@ global.macMachineId = '${mac_machine_id}';
567610
fi
568611
fi
569612

613+
# 添加在关键操作后记录日志
614+
echo "[MODIFIED] 文件修改后内容:" >> "$LOG_FILE"
615+
grep -n "return crypto.randomUUID()" "$file" | head -3 >> "$LOG_FILE"
616+
570617
# 清理临时文件
571618
rm -f "${file}.tmp" "${file}.bak"
619+
echo "[PROCESS] 文件处理完成: $file" >> "$LOG_FILE"
572620
done
573621

574622
if [ "$modified_count" -eq 0 ]; then
@@ -881,13 +929,23 @@ restore_feature() {
881929
# 主函数
882930
main() {
883931

932+
# 初始化日志文件
933+
initialize_log
934+
log_info "脚本启动..."
935+
936+
# 记录系统信息
937+
log_info "系统信息: $(uname -a)"
938+
log_info "当前用户: $CURRENT_USER"
939+
log_cmd_output "sw_vers" "macOS 版本信息"
940+
log_cmd_output "which codesign" "codesign 路径"
941+
log_cmd_output "ls -la \"$CURSOR_APP_PATH\"" "Cursor 应用信息"
942+
884943
# 新增环境检查
885944
if [[ $(uname) != "Darwin" ]]; then
886945
log_error "本脚本仅支持 macOS 系统"
887946
exit 1
888947
fi
889948

890-
891949
clear
892950
# 显示 Logo
893951
echo -e "
@@ -972,7 +1030,15 @@ main() {
9721030
# 显示最后的提示信息
9731031
show_follow_info
9741032

1033+
# 记录脚本完成信息
1034+
log_info "脚本执行完成"
1035+
echo "========== Cursor ID 修改工具日志结束 $(date) ==========" >> "$LOG_FILE"
9751036

1037+
# 显示日志文件位置
1038+
echo
1039+
log_info "详细日志已保存到: $LOG_FILE"
1040+
echo "如遇问题请将此日志文件提供给开发者以协助排查"
1041+
echo
9761042
}
9771043

9781044
# 执行主函数

0 commit comments

Comments
 (0)