@ -1,7 +1,7 @@
#!/bin/bash
#!/bin/bash
# 版本号
VERSION = "1.0.1 "
# 版本号 - 与其他文件保持一致
VERSION = "2.0.0 "
# 颜色定义
# 颜色定义
RED = '\033[0;31m'
RED = '\033[0;31m'
@ -10,9 +10,15 @@ YELLOW='\033[1;33m'
CYAN = '\033[0;36m'
CYAN = '\033[0;36m'
NC = '\033[0m'
NC = '\033[0m'
# 语言检测
# 语言检测优化
detect_language( ) {
detect_language( ) {
local lang = $( locale | grep "LANG=" | cut -d= -f2)
local lang
if [ -n " $LANG " ] ; then
lang = " $LANG "
else
lang = $( locale | grep "LANG=" | cut -d= -f2)
fi
if [ [ $lang = = *"zh" * ] ] ; then
if [ [ $lang = = *"zh" * ] ] ; then
echo "cn"
echo "cn"
else
else
@ -22,7 +28,7 @@ detect_language() {
LANG = $( detect_language)
LANG = $( detect_language)
# 多语言文本
# 多语言文本 - 修复编码问题
if [ " $LANG " = = "cn" ] ; then
if [ " $LANG " = = "cn" ] ; then
SUCCESS_MSG = "[√] 配置文件已成功更新!"
SUCCESS_MSG = "[√] 配置文件已成功更新!"
RESTART_MSG = "[!] 请手动重启 Cursor 以使更新生效"
RESTART_MSG = "[!] 请手动重启 Cursor 以使更新生效"
@ -32,6 +38,10 @@ if [ "$LANG" == "cn" ]; then
CLOSING_PROCESSES = "正在关闭 Cursor 实例..."
CLOSING_PROCESSES = "正在关闭 Cursor 实例..."
PROCESSES_CLOSED = "所有 Cursor 实例已关闭"
PROCESSES_CLOSED = "所有 Cursor 实例已关闭"
PLEASE_WAIT = "请稍候..."
PLEASE_WAIT = "请稍候..."
ERROR_NO_ROOT = "请使用 sudo 运行此脚本"
ERROR_CONFIG_PATH = "无法获取配置文件路径"
ERROR_CREATE_DIR = "无法创建配置目录"
ERROR_WRITE_CONFIG = "无法写入配置文件"
else
else
SUCCESS_MSG = "[√] Configuration file updated successfully!"
SUCCESS_MSG = "[√] Configuration file updated successfully!"
RESTART_MSG = "[!] Please restart Cursor manually for changes to take effect"
RESTART_MSG = "[!] Please restart Cursor manually for changes to take effect"
@ -41,23 +51,37 @@ else
CLOSING_PROCESSES = "Closing Cursor instances..."
CLOSING_PROCESSES = "Closing Cursor instances..."
PROCESSES_CLOSED = "All Cursor instances have been closed"
PROCESSES_CLOSED = "All Cursor instances have been closed"
PLEASE_WAIT = "Please wait..."
PLEASE_WAIT = "Please wait..."
ERROR_NO_ROOT = "Please run this script with sudo"
ERROR_CONFIG_PATH = "Unable to get config file path"
ERROR_CREATE_DIR = "Unable to create config directory"
ERROR_WRITE_CONFIG = "Unable to write config file"
fi
fi
# 生成随机ID
# 生成随机ID - 添加错误处理
generate_machine_id( ) {
generate_machine_id( ) {
openssl rand -hex 32
if ! command -v openssl >/dev/null 2>& 1; then
echo " $( head -c 32 /dev/urandom | xxd -p) "
else
openssl rand -hex 32
fi
}
}
generate_dev_device_id( ) {
generate_dev_device_id( ) {
printf '%04x%04x-%04x-%04x-%04x-%04x%04x%04x' \
$RANDOM $RANDOM \
$RANDOM \
$(( $RANDOM & 0 x0fff | 0 x4000)) \
$(( $RANDOM & 0 x3fff | 0 x8000)) \
$RANDOM $RANDOM $RANDOM
local uuid = ""
if command -v uuidgen >/dev/null 2>& 1; then
uuid = $( uuidgen)
else
uuid = $( printf '%04x%04x-%04x-%04x-%04x-%04x%04x%04x' \
$RANDOM $RANDOM \
$RANDOM \
$(( $RANDOM & 0 x0fff | 0 x4000)) \
$(( $RANDOM & 0 x3fff | 0 x8000)) \
$RANDOM $RANDOM $RANDOM )
fi
echo " $uuid "
}
}
# 获取配置文件路径
# 获取配置文件路径 - 优化路径处理
get_config_path( ) {
get_config_path( ) {
local username = $1
local username = $1
case " $( uname) " in
case " $( uname) " in
@ -68,29 +92,43 @@ get_config_path() {
echo " /home/ $username /.config/Cursor/User/globalStorage/storage.json "
echo " /home/ $username /.config/Cursor/User/globalStorage/storage.json "
; ;
; ;
*)
*)
echo "Unsupported operating system "
exit 1
echo ""
return 1
; ;
; ;
esac
esac
}
}
# 检查Cursor进程
# 检查Cursor进程 - 添加错误处理
check_cursor_running( ) {
check_cursor_running( ) {
pgrep -f "Cursor|AppRun" >/dev/null
if ! command -v pgrep >/dev/null 2>& 1; then
ps aux | grep -i "Cursor\|AppRun" | grep -v grep >/dev/null
else
pgrep -f "Cursor|AppRun" >/dev/null
fi
}
}
# 关闭Cursor进程
# 关闭Cursor进程 - 优化进程关闭
kill_cursor_processes( ) {
kill_cursor_processes( ) {
echo -e " ${ CYAN } $CLOSING_PROCESSES ${ NC } "
echo -e " ${ CYAN } $CLOSING_PROCESSES ${ NC } "
pkill -f "Cursor|AppRun"
if command -v pkill >/dev/null 2>& 1; then
pkill -f "Cursor|AppRun"
else
killall Cursor 2>/dev/null
killall AppRun 2>/dev/null
fi
sleep 2
sleep 2
if check_cursor_running; then
if check_cursor_running; then
pkill -9 -f "Cursor|AppRun"
if command -v pkill >/dev/null 2>& 1; then
pkill -9 -f "Cursor|AppRun"
else
killall -9 Cursor 2>/dev/null
killall -9 AppRun 2>/dev/null
fi
fi
fi
echo -e " ${ GREEN } $PROCESSES_CLOSED ${ NC } "
echo -e " ${ GREEN } $PROCESSES_CLOSED ${ NC } "
}
}
# 打印赛博朋克风格banner
# 打印banner - 修复显示问题
print_banner( ) {
print_banner( ) {
echo -e " ${ CYAN } "
echo -e " ${ CYAN } "
echo ' ██████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ '
echo ' ██████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗ '
@ -100,16 +138,16 @@ print_banner() {
echo ' ╚██████╗╚██████╔╝██║ ██║███████║╚██████╔╝██║ ██║'
echo ' ╚██████╗╚██████╔╝██║ ██║███████║╚██████╔╝██║ ██║'
echo ' ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝'
echo ' ╚═════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═╝ ╚═╝'
echo -e " ${ NC } "
echo -e " ${ NC } "
echo -e " ${ YELLOW } \t\t>> Cursor ID Modifier v1.0 << ${ NC } "
echo -e " ${ YELLOW } \t\t>> Cursor ID Modifier ${ VERSION } <<${ NC } "
echo -e " ${ CYAN } \t\t [ By Pancake Fruit Rolled Shark Chili ] ${ NC } "
echo -e " ${ CYAN } \t\t [ By Pancake Fruit Rolled Shark Chili ] ${ NC } "
echo
echo
}
}
# 主函数
# 主函数 - 添加错误处理
main( ) {
main( ) {
# 检查root权限
# 检查root权限
if [ " $EUID " -ne 0 ] ; then
if [ " $EUID " -ne 0 ] ; then
echo "Please run as root "
echo -e " ${ RED } ${ ERROR_NO_ROOT } ${ NC } "
exit 1
exit 1
fi
fi
@ -125,6 +163,10 @@ main() {
fi
fi
CONFIG_PATH = $( get_config_path " $REAL_USER " )
CONFIG_PATH = $( get_config_path " $REAL_USER " )
if [ -z " $CONFIG_PATH " ] ; then
echo -e " ${ RED } ${ ERROR_CONFIG_PATH } ${ NC } "
exit 1
fi
echo -e " ${ CYAN } $READING_CONFIG ${ NC } "
echo -e " ${ CYAN } $READING_CONFIG ${ NC } "
# 生成新配置
# 生成新配置
@ -134,28 +176,33 @@ main() {
"telemetry.macMachineId" : " $( generate_machine_id) " ,
"telemetry.macMachineId" : " $( generate_machine_id) " ,
"telemetry.machineId" : " $( generate_machine_id) " ,
"telemetry.machineId" : " $( generate_machine_id) " ,
"telemetry.devDeviceId" : " $( generate_dev_device_id) " ,
"telemetry.devDeviceId" : " $( generate_dev_device_id) " ,
"telemetry.sqmId" : " $( generate_machine_id) " ,
"lastModified" : " $( date -u +"%Y-%m-%dT%H:%M:%SZ" ) " ,
"version" : " $VERSION "
"telemetry.sqmId" : " $( generate_machine_id) "
}
}
EOF
EOF
)
)
# 创建目录(如果不存在)
# 创建目录(如果不存在)
mkdir -p " $( dirname " $CONFIG_PATH " ) "
if ! mkdir -p " $( dirname " $CONFIG_PATH " ) " 2>/dev/null; then
echo -e " ${ RED } ${ ERROR_CREATE_DIR } ${ NC } "
exit 1
fi
# 保存配置
# 保存配置
echo " $NEW_CONFIG " > " $CONFIG_PATH "
chown " $REAL_USER " " $CONFIG_PATH "
chmod 644 " $CONFIG_PATH "
if ! echo " $NEW_CONFIG " > " $CONFIG_PATH " ; then
echo -e " ${ RED } ${ ERROR_WRITE_CONFIG } ${ NC } "
exit 1
fi
chown " $REAL_USER " " $CONFIG_PATH " 2>/dev/null
chmod 644 " $CONFIG_PATH " 2>/dev/null
# 显示成功消息
# 显示成功消息
echo -e " \n ${ GREEN } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ${ NC } "
echo -e " \n ${ GREEN } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ${ NC } "
echo -e " ${ GREEN } $SUCCESS_MSG ${ NC } "
echo -e " ${ GREEN } $SUCCESS_MSG ${ NC } "
echo -e " ${ YELLOW } $RESTART_MSG ${ NC } "
echo -e " ${ YELLOW } $RESTART_MSG ${ NC } "
echo -e " ${ GREEN } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ${ NC } "
echo -e " ${ GREEN } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ${ NC } "
echo -e "\n��� 置文件位置/Config file location:"
echo -e "\n配 置文件位置/Config file location:"
echo -e " ${ CYAN } $CONFIG_PATH ${ NC } \n "
echo -e " ${ CYAN } $CONFIG_PATH ${ NC } \n "
read -p "Press Enter to exit..."
read -p "Press Enter to exit..."