From 803cfa79599e2a38911be182f213b715ba94c85c Mon Sep 17 00:00:00 2001 From: fscarmen <62703343+fscarmen@users.noreply.github.com> Date: Tue, 2 Jun 2026 08:06:10 +0800 Subject: [PATCH] fix: correct UUID extraction from nginx.conf after sb -d changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix awk logic matching /auto and /auto2 instead of actual UUID path * avoid empty UUID caused by incorrect regex matching fallback rules * thanks https://github.com/github0null for reporting the issue fix: 修复 sb -d 后 nginx.conf 中 UUID 提取错误问题 * 修复 awk 匹配到 /auto、/auto2 而非真实 UUID 路径的问题 * 修复正则错误导致 UUID 为空的问题 * 感谢 https://github.com/github0null 反馈该问题 --- sing-box.sh | 48 ++++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 18 deletions(-) diff --git a/sing-box.sh b/sing-box.sh index 20fc0fa..8120f20 100644 --- a/sing-box.sh +++ b/sing-box.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # 当前脚本版本号 -VERSION='v1.3.14 (2026.05.29)' +VERSION='v1.3.14 (2026.06.02)' # Github 反代加速代理 GITHUB_PROXY=('https://hub.glowp.xyz/' 'https://proxy.vvvv.ee/') @@ -566,6 +566,7 @@ format_uri_host() { fi } +# 输入优选 CDN input_cdn() { echo "" unset CUSTOM_CDN PARSED_HOST PARSED_PORT @@ -598,6 +599,23 @@ input_cdn() { done } +# 输入 UUID +input_uuid() { + # 输入 UUID ,错误超过 5 次将会退出 + UUID_DEFAULT=$(cat /proc/sys/kernel/random/uuid) + [[ "$IS_FAST_INSTALL" = 'is_fast_install' || "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]] && UUID_CONFIRM=${UUID_CONFIRM:-"$UUID_DEFAULT"} + if [ -z "$UUID_CONFIRM" ]; then + (( STEP_NUM++ )) || true + reading "\n ${TOTAL_STEPS:+(${STEP_NUM}/${TOTAL_STEPS}) } $(text 12) " UUID_CONFIRM + fi + local UUID_ERROR_TIME=5 + until [[ -z "$UUID_CONFIRM" || "${UUID_CONFIRM,,}" =~ ^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$ ]]; do + (( UUID_ERROR_TIME-- )) || true + [ "$UUID_ERROR_TIME" = 0 ] && error "\n $(text 3) \n" || reading "\n $(text 4) \n" UUID_CONFIRM + done + UUID_CONFIRM=${UUID_CONFIRM:-"$UUID_DEFAULT"} +} + # 更换优选域名 / reality SNI / 节点名 / UUID change_config() { [ ! -d "${WORK_DIR}" ] && error " $(text 107) " @@ -2448,19 +2466,8 @@ sing-box_variables() { input_cdn fi - # 输入 UUID ,错误超过 5 次将会退出 - UUID_DEFAULT=$(cat /proc/sys/kernel/random/uuid) - [[ "$IS_FAST_INSTALL" = 'is_fast_install' || "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]] && UUID_CONFIRM=${UUID_CONFIRM:-"$UUID_DEFAULT"} - if [ -z "$UUID_CONFIRM" ]; then - (( STEP_NUM++ )) || true - reading "\n (${STEP_NUM}/${TOTAL_STEPS}) $(text 12) " UUID_CONFIRM - fi - local UUID_ERROR_TIME=5 - until [[ -z "$UUID_CONFIRM" || "${UUID_CONFIRM,,}" =~ ^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$ ]]; do - (( UUID_ERROR_TIME-- )) || true - [ "$UUID_ERROR_TIME" = 0 ] && error "\n $(text 3) \n" || reading "\n $(text 4) \n" UUID_CONFIRM - done - UUID_CONFIRM=${UUID_CONFIRM:-"$UUID_DEFAULT"} + # 确认 UUID + input_uuid # 输入节点名,以系统的 hostname 作为默认 local EMOJI="${EMOJI4:-$EMOJI6}" @@ -5129,7 +5136,7 @@ change_start_port() { [ -s ${WORK_DIR}/conf/${CONF_FILES[a]} ] && sed -i "s/\(.*listen_port.*:\)$((OLD_START_PORT+a))/\1$((START_PORT+a))/" ${WORK_DIR}/conf/* done fetch_nodes_value - [ -n "$PORT_NGINX" ] && UUID_CONFIRM=$(sed -n 's#.*location[ ]\+\/\(.*\)-v[ml]ess.*#\1#gp' /etc/sing-box/nginx.conf | sed -n '1p') && export_nginx_conf_file + [ -n "$PORT_NGINX" ] && UUID_CONFIRM=$(awk '/location/ && /\// {match($0, /\/([^ \/]+)/, arr); p=arr[1]; sub(/-(vmess|vless|auto2|auto).*/, "", p); print p; exit}' ${WORK_DIR}/nginx.conf) && export_nginx_conf_file cmd_systemctl enable sing-box [ -n "$ARGO_DOMAIN" ] && export_argo_json_file sync_firewall_rules @@ -5216,7 +5223,14 @@ change_protocols() { fetch_nodes_value # 用于新节点的配置信息 - UUID_CONFIRM=$(awk '{print $1}' <<< "${UUID[@]} $TROJAN_PASSWORD") + if [ "${#UUID[@]}" -gt 0 ]; then + UUID_CONFIRM="${UUID[0]}" + elif grep -q '.' <<< "${TROJAN_PASSWORD}"; then + UUID_CONFIRM="${TROJAN_PASSWORD}" + else + input_uuid + fi + for v in "${NODE_NAME[@]}"; do [ -n "$v" ] && NODE_NAME_CONFIRM="$v" && break done @@ -5469,8 +5483,6 @@ change_protocols() { # 停止 sing-box 服务 cmd_systemctl disable sing-box - # 关闭防火墙相关端口 - # 生成 Nginx 配置文件 [ -n "$PORT_NGINX" ] && export_nginx_conf_file