From 2b7eebd30283fa154f86277c5d56dd18c84a08b7 Mon Sep 17 00:00:00 2001 From: Sora39831 <540587985@qq.com> Date: Thu, 2 Apr 2026 22:05:44 +0800 Subject: [PATCH] fix: correct JSON parsing for prerelease detection in GitHub API response The GitHub API returns "prerelease": false (with space after colon), but the grep pattern used "prerelease":false (no space). Also, tag_name and prerelease are on different lines after tr '{' '\\n', so the piped grep chain couldn't find both fields. Fixed with grep -B5 to look backwards from prerelease line to find tag_name. --- install.sh | 4 ++-- update.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/install.sh b/install.sh index 96e28caa..c207fd07 100644 --- a/install.sh +++ b/install.sh @@ -884,10 +884,10 @@ get_releases() { fi # Parse first non-prerelease tag_name - latest_stable=$(echo "$releases_json" | tr '{' '\n' | grep '"prerelease":false' | head -1 | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + latest_stable=$(echo "$releases_json" | tr '{' '\n' | grep -B5 '"prerelease": false' | grep '"tag_name":' | head -1 | sed -E 's/.*"([^"]+)".*/\1/') # Parse first prerelease tag_name - latest_prerelease=$(echo "$releases_json" | tr '{' '\n' | grep '"prerelease":true' | head -1 | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + latest_prerelease=$(echo "$releases_json" | tr '{' '\n' | grep -B5 '"prerelease": true' | grep '"tag_name":' | head -1 | sed -E 's/.*"([^"]+)".*/\1/') if [[ -z "$latest_stable" && -z "$latest_prerelease" ]]; then echo -e "${red}获取 x-ui 版本失败${plain}" diff --git a/update.sh b/update.sh index eac108f7..9a719635 100755 --- a/update.sh +++ b/update.sh @@ -756,8 +756,8 @@ get_releases() { fi fi - latest_stable=$(echo "$releases_json" | tr '{' '\n' | grep '"prerelease":false' | head -1 | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') - latest_prerelease=$(echo "$releases_json" | tr '{' '\n' | grep '"prerelease":true' | head -1 | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/') + latest_stable=$(echo "$releases_json" | tr '{' '\n' | grep -B5 '"prerelease": false' | grep '"tag_name":' | head -1 | sed -E 's/.*"([^"]+)".*/\1/') + latest_prerelease=$(echo "$releases_json" | tr '{' '\n' | grep -B5 '"prerelease": true' | grep '"tag_name":' | head -1 | sed -E 's/.*"([^"]+)".*/\1/') if [[ -z "$latest_stable" && -z "$latest_prerelease" ]]; then _fail "ERROR: Failed to fetch x-ui version"