Debian10系统下bash脚本检测已安装lynx仍报错如何调试
问题根因
你脚本中binupdate分支的lynx安装状态判断逻辑写反:which lynx > /dev/null 2>&1命令返回值为0(即if判断为真)时,代表lynx已经成功安装,但你在该分支下编写的是提示安装lynx并退出的逻辑,所以会出现系统已装lynx仍然报错的问题。删除/dev/null重定向不会修改命令的返回值,你观察到的“删除后可正常运行”属于偶发异常,核心问题为条件逻辑错误。
修复方案
调整lynx检测的条件逻辑,在if判断前加!对返回值取反即可,可保留原有的/dev/null重定向逻辑:
case "$1" in binupdate) # 修正后逻辑:当检测不到lynx时才触发安装提示 if ! which lynx > /dev/null 2>&1;then echo please install lynx package exit 2 fi # 后续原有逻辑保持不变 if id -u|grep -qw 0;then #some process# cd /usr/bin curl $url|tar --strip-components=2 -xz $dirname/appname else echo please run binary updates as root by running: sudo $0 binupdate fi ;;
可选优化建议
- 优先使用POSIX标准兼容的
command -v代替which做命令存在性检测,避免不同发行版which实现差异导致的兼容问题,修改后检测代码为:if ! command -v lynx > /dev/null 2>&1;then - 所有变量引用建议用双引号包裹,避免变量值存在空格时触发的解析错误,比如
"$appname"、"$url"、"$dirname"等。
内容的提问来源于stack exchange,提问作者Yukie Satoshi Nobuharu
相关产品推荐
相关产品推荐

