autonetplan脚本更新功能jq解析错误求助:版本提取异常
解决autonetplan.sh版本更新功能的jq解析错误问题
错误原因分析
jq: parse error: Invalid numeric literal 错误说明你的jq命令在解析JSON时,试图把非纯数值内容转成数字,或者JSON结构和代码预期不符。结合你的场景,大概率是以下两种情况:
- GitHub Release的版本号带
v前缀(比如v1.0.0),但代码里直接用tonumber转换,导致解析失败 - 代码中的jq表达式引用了错误的JSON字段,或是curl返回内容并非有效JSON(比如网络错误、API请求失败返回的HTML页面)
排查与修复步骤
验证GitHub API返回内容
手动执行curl命令查看返回的JSON结构:curl -s https://api.github.com/repos/Nisamov/autonetplan/releases/latest确认版本号字段是
tag_name(GitHub Release API的标准字段),以及字段值的格式(是否带v前缀)。修正jq解析逻辑
如果版本号带v前缀,需要先去除前缀再处理,示例代码:# 获取最新版本号(去除v前缀) latest_version=$(curl -s https://api.github.com/repos/Nisamov/autonetplan/releases/latest | jq -r '.tag_name | ltrimstr("v")') # 获取本地版本号(假设本地VERSION变量也带v前缀,同样处理) local_version=$(grep -E '^VERSION=' autonetplan.sh | cut -d'=' -f2 | sed 's/^v//')安全处理版本对比
语义化版本号建议用字符串排序对比,避免数值转换的问题:# 对比版本,若最新版本大于本地版本则执行更新 if [ "$(printf '%s\n' "$local_version" "$latest_version" | sort -V | head -n1)" != "$latest_version" ]; then # 这里写你的更新逻辑(拉取代码、替换脚本等) echo "发现新版本$latest_version,开始更新..." fi增加错误检查
在curl请求后添加检查,确保返回的是有效JSON:release_data=$(curl -s https://api.github.com/repos/Nisamov/autonetplan/releases/latest) if ! echo "$release_data" | jq . >/dev/null 2>&1; then echo "错误:无法获取或解析GitHub版本信息" exit 1 fi latest_version=$(echo "$release_data" | jq -r '.tag_name | ltrimstr("v")')
内容的提问来源于stack exchange,提问作者Nisamov
相关产品推荐
相关产品推荐

