Bash下匹配Mac当前桌面壁纸文件路径的优化方案咨询
更简洁高效的实现优化方向
你现有写的判定逻辑本身是可以稳定运行的,只是可以从代码精简、运行效率、判定精度三个方向做调整,实现更优的效果:
压缩冗余代码,减少临时变量占用
原来的逻辑用两个临时变量分别存完整壁纸路径、提取后的目录路径,其实完全可以把命令嵌套进条件判断,去掉无意义的临时变量,同时优化匹配规则避免边界情况误判:
# 无冗余临时变量的精简实现 if [[ "$(dirname "$(osascript -e 'tell app "finder" to get posix path of (get desktop picture as alias)')")" == "/Library/Desktop Pictures/Custom"* ]]; then echo "<result>SET</result>" else echo "<result>NOT SET</result>" fi
- 匹配规则末尾加
*通配符,可以兼容路径返回时末尾可能带斜杠的边界情况,不会因为微小的格式差异把已设置的状态误判为未设置 - 注意不要用
path作为临时变量名,这是类Unix系统里和核心环境变量PATH近似的特殊命名,容易在脚本导出变量时引发全局环境污染
降低进程开销,提升执行速度
原来通过osascript唤起Finder走AppleEvent交互拿壁纸路径,单次执行的进程启动、跨语言交互开销大概在100-200ms,换成直接读取系统本地存储的plist配置的方式,不需要拉起额外的交互进程,执行速度可以提升3倍以上:
# 直接读取系统配置中的壁纸路径,无需依赖AppleScript current_wallpaper=$(defaults read com.apple.desktop Background | grep "ImageFilePath" | sed -E 's/.*"(.*)";/\1/') if [[ "$(dirname "$current_wallpaper")" == "/Library/Desktop Pictures/Custom"* ]]; then echo "<result>SET</result>" else echo "<result>NOT SET</result>" fi
结合已知文件规则,提升判定精度
既然已经明确目标目录下只有custom1.jpg、custom2.jpg、custom3.jpg三个自定义文件,完全可以跳过提取上级目录的步骤,直接做文件级的正则匹配,既少一步shell文本处理的开销,还能避免目录下其他无关文件被设成壁纸时的误判:
# 直接匹配文件归属规则,无需提取上级目录 current_wallpaper=$(osascript -e 'tell app "finder" to get posix path of (get desktop picture as alias)') if [[ "$current_wallpaper" =~ ^/Library/Desktop Pictures/Custom/custom[1-3]\.jpg$ ]]; then echo "<result>SET</result>" else echo "<result>NOT SET</result>" fi
内容的提问来源于stack exchange,提问作者Snomad
相关产品推荐
相关产品推荐

