From 4f8f9885184174abb9a38e1d89c790ffe03b988f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=85=8E=E9=A5=BC=E6=9E=9C=E5=AD=90=E5=8D=B7=E9=B2=A8?= =?UTF-8?q?=E9=B1=BC=E8=BE=A3=E6=A4=92?= Date: Fri, 14 Mar 2025 19:14:29 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E8=BF=9Bcursor=5Fmac=5Fid=5Fmodifier.?= =?UTF-8?q?sh=E8=84=9A=E6=9C=AC=E4=B8=AD=E7=9A=84=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E5=A4=84=E7=90=86=EF=BC=8C=E9=87=87=E7=94=A8?= =?UTF-8?q?=E6=9B=B4=E5=81=A5=E5=A3=AE=E7=9A=84=E6=96=B9=E5=BC=8F=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E9=80=89=E6=8B=A9=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E4=BA=86=E8=BE=93=E5=85=A5=E7=BC=93=E5=86=B2=E5=8C=BA?= =?UTF-8?q?=E6=B8=85=E7=A9=BA=E6=9C=BA=E5=88=B6=E3=80=82=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E6=97=A5=E5=BF=97=E4=BB=A5=E4=BE=BF=E4=BA=8E?= =?UTF-8?q?=E8=BF=BD=E8=B8=AA=E7=94=A8=E6=88=B7=E8=BE=93=E5=85=A5=EF=BC=8C?= =?UTF-8?q?=E7=A1=AE=E4=BF=9D=E8=84=9A=E6=9C=AC=E5=9C=A8=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98=E6=97=B6=E4=B8=8D=E4=BC=9A=E7=BB=88=E6=AD=A2?= =?UTF-8?q?=EF=BC=8C=E6=8F=90=E5=8D=87=E4=BA=86=E8=84=9A=E6=9C=AC=E7=9A=84?= =?UTF-8?q?=E7=A8=B3=E5=AE=9A=E6=80=A7=E5=92=8C=E7=94=A8=E6=88=B7=E4=BD=93?= =?UTF-8?q?=E9=AA=8C=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/run/cursor_mac_id_modifier.sh | 151 +++++++++++++++++++------- 1 file changed, 109 insertions(+), 42 deletions(-) diff --git a/scripts/run/cursor_mac_id_modifier.sh b/scripts/run/cursor_mac_id_modifier.sh index f7007be..a632a86 100644 --- a/scripts/run/cursor_mac_id_modifier.sh +++ b/scripts/run/cursor_mac_id_modifier.sh @@ -1048,29 +1048,53 @@ main() { echo "" printf "请输入选择 [0-1] (默认 1): " - # 清空输入缓冲区 - while read -r -t 0.1; do read -r; done - - # 使用/dev/tty确保直接从终端读取输入 + # 使用更健壮的方式读取用户输入 app_choice="" - read -r app_choice /dev/null + + # 方法2: 重定向方式 + exec <&- + exec < /dev/tty + + # 尝试使用默认输入和/dev/tty两种方式读取 + app_choice=$(read -r choice; echo "$choice") + if [ -z "$app_choice" ]; then + # 如果上面的方法失败,尝试直接使用/dev/tty + if [ -e "/dev/tty" ] && [ -r "/dev/tty" ] && [ -w "/dev/tty" ]; then + app_choice=$(head -n 1 < /dev/tty 2>/dev/null) + fi + fi + + # 记录日志以便调试 + echo "[INPUT_DEBUG] 读取到的选择: '$app_choice'" >> "$LOG_FILE" + + # 确保脚本不会因为输入问题而终止 + set +e # 处理用户选择 - case "$app_choice" in - 0) - log_info "您选择了跳过主程序文件修改" - log_info "已跳过主程序文件修改" - ;; - *) - log_info "您选择了修改主程序文件" + if [ "$app_choice" = "0" ]; then + log_info "您选择了跳过主程序文件修改" + log_info "已跳过主程序文件修改" + else + # 默认或输入1都执行修改 + log_info "正在执行主程序文件修改..." + + # 使用子shell执行修改,避免错误导致整个脚本退出 + ( if modify_cursor_app_files; then log_info "主程序文件修改成功!" else log_warn "主程序文件修改失败,但配置文件修改可能已成功" log_warn "如果重启后 Cursor 仍然提示设备被禁用,请重新运行此脚本" fi - ;; - esac + ) + fi + + # 恢复错误处理 + set -e # 添加MAC地址修改选项 echo @@ -1080,27 +1104,49 @@ main() { echo "" printf "请输入选择 [0-1] (默认 0): " - # 清空输入缓冲区 - while read -r -t 0.1; do read -r; done - - # 使用/dev/tty确保直接从终端读取输入 + # 使用更健壮的方式读取用户输入 mac_choice="" - read -r mac_choice /dev/null + + # 方法2: 重定向方式 + exec <&- + exec < /dev/tty + + # 尝试使用默认输入和/dev/tty两种方式读取 + mac_choice=$(read -r choice; echo "$choice") + if [ -z "$mac_choice" ]; then + # 如果上面的方法失败,尝试直接使用/dev/tty + if [ -e "/dev/tty" ] && [ -r "/dev/tty" ] && [ -w "/dev/tty" ]; then + mac_choice=$(head -n 1 < /dev/tty 2>/dev/null) + fi + fi + + # 记录日志以便调试 + echo "[INPUT_DEBUG] MAC地址选择: '$mac_choice'" >> "$LOG_FILE" + + # 确保脚本不会因为输入问题而终止 + set +e + + # 处理用户选择 + if [ "$mac_choice" = "1" ]; then + log_info "您选择了修改MAC地址" + # 使用子shell执行修改,避免错误导致整个脚本退出 + ( if modify_mac_address; then log_info "MAC地址修改完成!" else log_error "MAC地址修改失败" fi - ;; - *) - log_info "已跳过MAC地址修改" - ;; - esac + ) + else + log_info "已跳过MAC地址修改" + fi + + # 恢复错误处理 + set -e show_file_tree show_follow_info @@ -1124,18 +1170,37 @@ main() { echo "" printf "是否需要恢复原始 Cursor? [0-1] (默认 0): " - # 清空输入缓冲区 - while read -r -t 0.1; do read -r; done - - # 使用/dev/tty确保直接从终端读取输入 + # 使用更健壮的方式读取用户输入 fix_choice="" - read -r fix_choice /dev/null + + # 方法2: 重定向方式 + exec <&- + exec < /dev/tty + + # 尝试使用默认输入和/dev/tty两种方式读取 + fix_choice=$(read -r choice; echo "$choice") + if [ -z "$fix_choice" ]; then + # 如果上面的方法失败,尝试直接使用/dev/tty + if [ -e "/dev/tty" ] && [ -r "/dev/tty" ] && [ -w "/dev/tty" ]; then + fix_choice=$(head -n 1 < /dev/tty 2>/dev/null) + fi + fi + + # 记录日志以便调试 + echo "[INPUT_DEBUG] 修复选项选择: '$fix_choice'" >> "$LOG_FILE" + + # 确保脚本不会因为输入问题而终止 + set +e # 处理用户选择 - case "$fix_choice" in - 1) - log_info "您选择了修复模式" - # 清理Cursor应用 + if [ "$fix_choice" = "1" ]; then + log_info "您选择了修复模式" + # 使用子shell执行清理,避免错误导致整个脚本退出 + ( if clean_cursor_app; then log_info "Cursor 已恢复到原始状态" log_info "如果您需要应用ID修改,请重新运行此脚本" @@ -1143,11 +1208,13 @@ main() { log_warn "未能找到备份,无法自动恢复" log_warn "建议重新安装 Cursor" fi - ;; - *) - log_info "已跳过修复操作" - ;; - esac + ) + else + log_info "已跳过修复操作" + fi + + # 恢复错误处理 + set -e # 记录脚本完成信息 log_info "脚本执行完成"