@@ -42,7 +42,7 @@ if [ -z "$CURRENT_USER" ]; then
42
42
exit 1
43
43
fi
44
44
45
- # 定义配置文件路径 (Linux 路径)
45
+ # 定义配置文件路径 (修改为 Linux 路径)
46
46
STORAGE_FILE=" /home/$CURRENT_USER /.config/Cursor/User/globalStorage/storage.json"
47
47
BACKUP_DIR=" /home/$CURRENT_USER /.config/Cursor/User/globalStorage/backups"
48
48
@@ -66,48 +66,60 @@ check_and_kill_cursor() {
66
66
get_process_details () {
67
67
local process_name=" $1 "
68
68
log_debug " 正在获取 $process_name 进程详细信息:"
69
- ps aux | grep -i " $process_name " | grep -v grep
69
+ ps aux | grep -E " /[C]ursor|[C]ursor$ " || true
70
70
}
71
71
72
72
while [ $attempt -le $max_attempts ]; do
73
- CURSOR_PIDS=$( pgrep -i " cursor" || true)
73
+ # 使用更精确的方式查找 Cursor 进程
74
+ CURSOR_PIDS=$( ps aux | grep -E " /[C]ursor|[C]ursor$" | awk ' {print $2}' || true)
74
75
75
76
if [ -z " $CURSOR_PIDS " ]; then
76
77
log_info " 未发现运行中的 Cursor 进程"
77
78
return 0
78
79
fi
79
80
80
81
log_warn " 发现 Cursor 进程正在运行"
81
- get_process_details " cursor "
82
+ get_process_details " Cursor "
82
83
83
84
log_warn " 尝试关闭 Cursor 进程..."
84
85
85
- if [ $attempt -eq $max_attempts ]; then
86
- log_warn " 尝试强制终止进程..."
87
- kill -9 $CURSOR_PIDS 2> /dev/null || true
88
- else
89
- kill $CURSOR_PIDS 2> /dev/null || true
90
- fi
86
+ # 遍历每个 PID 并尝试终止
87
+ for pid in $CURSOR_PIDS ; do
88
+ if [ $attempt -eq $max_attempts ]; then
89
+ log_warn " 尝试强制终止进程 PID: ${pid} ..."
90
+ kill -9 " ${pid} " 2> /dev/null || true
91
+ else
92
+ kill " ${pid} " 2> /dev/null || true
93
+ fi
94
+ done
91
95
92
- sleep 1
96
+ sleep 2
93
97
94
- if ! pgrep -i " cursor" > /dev/null; then
98
+ # 检查是否还有 Cursor 进程在运行
99
+ if ! ps aux | grep -E " /[C]ursor|[C]ursor$" > /dev/null; then
95
100
log_info " Cursor 进程已成功关闭"
96
101
return 0
97
102
fi
98
103
99
104
log_warn " 等待进程关闭,尝试 $attempt /$max_attempts ..."
100
105
(( attempt++ ))
106
+ sleep 1
101
107
done
102
108
103
109
log_error " 在 $max_attempts 次尝试后仍无法关闭 Cursor 进程"
104
- get_process_details " cursor "
110
+ get_process_details " Cursor "
105
111
log_error " 请手动关闭进程后重试"
106
112
exit 1
107
113
}
108
114
109
115
# 备份配置文件
110
116
backup_config () {
117
+ # 检查文件权限
118
+ if [ -f " $STORAGE_FILE " ] && [ ! -w " $STORAGE_FILE " ]; then
119
+ log_error " 无法写入配置文件,请检查权限"
120
+ exit 1
121
+ fi
122
+
111
123
if [ ! -f " $STORAGE_FILE " ]; then
112
124
log_warn " 配置文件不存在,跳过备份"
113
125
return 0
@@ -140,25 +152,47 @@ generate_uuid() {
140
152
141
153
# 生成新的配置
142
154
generate_new_config () {
143
- local machine_id=" auth0|user_$( generate_random_id) "
155
+ # 错误处理
156
+ if ! command -v xxd & > /dev/null; then
157
+ log_error " 未找到 xxd 命令,请安装 xxd"
158
+ exit 1
159
+ fi
160
+
161
+ if ! command -v uuidgen & > /dev/null; then
162
+ log_error " 未找到 uuidgen 命令,请安装 uuidgen"
163
+ exit 1
164
+ fi
165
+
166
+ # 确保目录存在
167
+ mkdir -p " $( dirname " $STORAGE_FILE " ) "
168
+
169
+ # 将 auth0|user_ 转换为字节数组的十六进制
170
+ local prefix_hex=$( echo -n " auth0|user_" | xxd -p)
171
+ # 生成随机部分
172
+ local random_part=$( generate_random_id)
173
+ # 拼接前缀的十六进制和随机部分
174
+ local machine_id=" ${prefix_hex}${random_part} "
175
+
144
176
local mac_machine_id=$( generate_random_id)
145
177
local device_id=$( generate_uuid | tr ' [:upper:]' ' [:lower:]' )
146
178
local sqm_id=" {$( generate_uuid | tr ' [:lower:]' ' [:upper:]' ) }"
147
179
148
180
if [ -f " $STORAGE_FILE " ]; then
149
- # 直接修改现有文件 (Linux sed 不需要 '')
150
- sed -i " s/\" telemetry\.machineId\" :[[:space:]]*\" [^\" ]*\" /\" telemetry.machineId\" : \" $machine_id \" /" " $STORAGE_FILE "
151
- sed -i " s/\" telemetry\.macMachineId\" :[[:space:]]*\" [^\" ]*\" /\" telemetry.macMachineId\" : \" $mac_machine_id \" /" " $STORAGE_FILE "
152
- sed -i " s/\" telemetry\.devDeviceId\" :[[:space:]]*\" [^\" ]*\" /\" telemetry.devDeviceId\" : \" $device_id \" /" " $STORAGE_FILE "
153
- sed -i " s/\" telemetry\.sqmId\" :[[:space:]]*\" [^\" ]*\" /\" telemetry.sqmId\" : \" $sqm_id \" /" " $STORAGE_FILE "
181
+ # 直接修改现有文件
182
+ sed -i -e " s/\" telemetry\.machineId\" :[[:space:]]*\" [^\" ]*\" /\" telemetry.machineId\" : \" $machine_id \" /" " $STORAGE_FILE "
183
+ sed -i -e " s/\" telemetry\.macMachineId\" :[[:space:]]*\" [^\" ]*\" /\" telemetry.macMachineId\" : \" $mac_machine_id \" /" " $STORAGE_FILE "
184
+ sed -i -e " s/\" telemetry\.devDeviceId\" :[[:space:]]*\" [^\" ]*\" /\" telemetry.devDeviceId\" : \" $device_id \" /" " $STORAGE_FILE "
185
+ sed -i -e " s/\" telemetry\.sqmId\" :[[:space:]]*\" [^\" ]*\" /\" telemetry.sqmId\" : \" $sqm_id \" /" " $STORAGE_FILE "
154
186
else
155
187
# 创建新文件
156
- echo " {" > " $STORAGE_FILE "
157
- echo " \" telemetry.machineId\" : \" $machine_id \" ," >> " $STORAGE_FILE "
158
- echo " \" telemetry.macMachineId\" : \" $mac_machine_id \" ," >> " $STORAGE_FILE "
159
- echo " \" telemetry.devDeviceId\" : \" $device_id \" ," >> " $STORAGE_FILE "
160
- echo " \" telemetry.sqmId\" : \" $sqm_id \" " >> " $STORAGE_FILE "
161
- echo " }" >> " $STORAGE_FILE "
188
+ cat > " $STORAGE_FILE " << EOF
189
+ {
190
+ "telemetry.machineId": "$machine_id ",
191
+ "telemetry.macMachineId": "$mac_machine_id ",
192
+ "telemetry.devDeviceId": "$device_id ",
193
+ "telemetry.sqmId": "$sqm_id "
194
+ }
195
+ EOF
162
196
fi
163
197
164
198
chmod 644 " $STORAGE_FILE "
@@ -185,7 +219,7 @@ show_file_tree() {
185
219
# 列出备份文件
186
220
if [ -d " $BACKUP_DIR " ]; then
187
221
local backup_files=(" $BACKUP_DIR " /* )
188
- if [ ${# backup_files[@]} -gt 0 ]; then
222
+ if [ ${# backup_files[@]} -gt 0 ] && [ -e " ${backup_files[0]} " ] ; then
189
223
for file in " ${backup_files[@]} " ; do
190
224
if [ -f " $file " ]; then
191
225
echo " │ └── $( basename " $file " ) "
@@ -202,7 +236,7 @@ show_file_tree() {
202
236
show_follow_info () {
203
237
echo
204
238
echo -e " ${GREEN} ================================${NC} "
205
- echo -e " ${YELLOW} 关注公众号【煎饼果子AI 】一起交流更多Cursor技巧和AI知识 ${NC} "
239
+ echo -e " ${YELLOW} 关注公众号【煎饼果子卷AI 】一起交流更多Cursor技巧和AI知识 ${NC} "
206
240
echo -e " ${GREEN} ================================${NC} "
207
241
echo
208
242
}
0 commit comments