我一直在使用 xdotool 编译一个复杂的 bash 脚本,它一直运行良好,只是偶尔我会收到一个相当烦人的错误,因为该脚本部分被中止。错误如下:
xdotool: Unknown command: 1
Run 'xdotool help' if you want a command list
xdotool: Unknown command: 1
Run 'xdotool help' if you want a command list
在脚本运行过程中,这种情况重复了大约 600 次,我找不到原因。它会在当前调用开始时随机抛出该错误,并且在整个运行过程中,特定脚本最多可以被调用 20 次,这可能需要长达 8 小时才能完成,所以你可以想象我无法总是发现并纠正它!如果我中止并重新启动,它会正常工作,所以我怀疑是上一节的漏洞,或者只是误读了该运行的 $rnd 变量。这是导致错误的脚本片段:
#!/bin/bash
date +"%T"
start_time=$(date +%s)
P=(0.45 0.5 0.56 0.57 0.58 0.59 0.6 0.61 0.62 0.62 0.64 0.65 0.66 0.67 0.68 0.69 0.7 0.71 0.72 0.73 0.74 0.75 0.77 0.8 0.82 0.88 0.9 0.92 0.93 0.94)
Q=(11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 12.0 12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8 12.9 13.0 13.1 13.2 13.3 13.4 13.5 13.6 13.7 13.8 13.9 14.0)
R=(3.9 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 5.1 5.2 5.3 5.4 5.5)
S=(15.5 15.6 15.7 15.8 15.9 16 0 16.1 16.2 16.3 16.4 16.5 16.6 16.7 16.8 16.9 17.0)
#T=(154 155 156 157 158 159 160 161 162 163 164 165 166 167 168)
#U=(233 236 251 259 273 276 281 284 286 289 295 297 304 315 317 320 323 327 329 331 335)
rnd=${P[RANDOM%31]}
rnd1=${Q[RANDOM%${#Q[@]}]}
rnd2=${R[RANDOM%${#R[@]}]}
rnd3=${S[RANDOM%${#S[@]}]}
sleep $rnd2
xdotool mousemove 746 636 sleep $rnd click 1 sleep $rnd
xdotool mousemove $fac sleep $rnd click 1 sleep $rnd
xdotool mousemove $drop sleep $rnd click 1 sleep $rnd2
xdotool mousemove 744 244 sleep $rnd click 1 sleep $rnd
xdotool mousemove 682 284 sleep $rnd click 1 sleep $rnd
xdotool mousemove 744 244 sleep $rnd click 1 sleep $rnd
xdotool mousemove 881 169 sleep $rnd click 1 sleep $rnd
然后,它会在每次运行中重复该序列,每次使用不同的坐标超过 40 次,并由另一个提供相关变量的脚本调用,这些变量也是鼠标坐标,完成后,它会关闭并再次由序列的下一个脚本调用。仅供参考,如果它出错,一旦运行完成,它将完美地开始下一次运行!
我确信脚本可以以更合乎逻辑的方式编写,并且有更好的方法来解决 rnd 函数,但这对主要部分有效并且为我节省了许多小时的点击时间!
先生们女士们,你们要面对一个挑战!能否重写得更好一些,这样可以避免这个恼人的错误吗?
答案1
替换rnd=${P[RANDOM%31]}
为rnd=${P[RANDOM%${#P[@]}]}
。实际上,数组P
只有 30 个项目,并且rnd
变量有时会收到一个空值,导致xdotool
如下调用:
xdotool mousemove 746 636 sleep click 1 sleep
问题也可能出在$fac
或$drop
参数上。有时其中一个参数可能会收到不正确的值,例如123 456 1
。