如何在Bash脚本中匹配执行版本号动态变动的.AppImage文件
报错核心原因
你的脚本报错有两个直接问题:
- 路径写错:你写的
./home/xxx是相对路径,指代「当前工作目录下的home文件夹」,而你要访问的用户目录是系统绝对路径/home/xxx,开头多打了一个.,直接导致路径指向错误位置。 - 直接用通配符拼执行命令没有容错:如果目录里残留了多个旧版本AppImage,通配符展开后会把所有文件名拼到命令里,相当于给程序传了一堆无效参数,大概率启动失败;如果没有匹配到任何文件,通配符不会展开,会直接把带
*的原始字符串当命令执行,也会报找不到文件。
可用方案
最简修复版
如果你能保证该目录下同时只会存在一个匹配命名的AppImage文件,直接把路径开头多余的.删掉即可:
#!/bin/bash /home/myname/Applications/myApplication-*.AppImage
鲁棒性增强版(推荐)
这个版本会自动选取目录下最新修改的匹配AppImage启动,兼容旧版本残留、文件无执行权限、无匹配文件等异常场景,不用每次更新后调整脚本:
#!/bin/bash APP_DIR="/home/myname/Applications" FILE_MATCH_RULE="myApplication-*.AppImage" # 查找匹配文件,按修改时间排序取最新的 target_app=$(find "$APP_DIR" -maxdepth 1 -type f -name "$FILE_MATCH_RULE" -printf "%T@ %p\n" | sort -nr | head -n1 | cut -d' ' -f2-) if [ -z "$target_app" ]; then echo "启动失败:未在指定目录找到匹配的AppImage文件" >&2 exit 1 fi # 自动补执行权限,避免更新后权限异常 chmod +x "$target_app" # 启动程序 "$target_app"
提示:如果你的AppImage实际存放路径和示例不一致,把脚本里的
APP_DIR变量改成对应绝对路径即可。
内容的提问来源于stack exchange,提问作者Nqtural
相关产品推荐
相关产品推荐

