From c61c637e0d8d95e5534802cf4656d9dbe6f95c2d Mon Sep 17 00:00:00 2001 From: Feng Yu Date: Sun, 22 Mar 2026 23:52:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=AB=AF=E5=8F=A3=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=A3=80=E6=9F=A5=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E5=87=BD=E6=95=B0=E8=81=8C=E8=B4=A3=E5=8D=95=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - check_port 函数只负责检查端口范围和占用,移除重复检查逻辑 - 端口重复检查移到 inputport 函数中,只排除当前编辑的端口变量 - 修复编辑端口时错误地跳过所有已配置端口重复检查的 bug --- scripts/menus/2_settings.sh | 22 +++++++++++++++++----- scripts/menus/check_port.sh | 13 ------------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/scripts/menus/2_settings.sh b/scripts/menus/2_settings.sh index d78bbed0..c7cdb362 100644 --- a/scripts/menus/2_settings.sh +++ b/scripts/menus/2_settings.sh @@ -393,14 +393,26 @@ inputport() { line_break read -r -p "$INPUT_PORT(1~65535)> " portx . "$CRASHDIR"/menus/check_port.sh - if check_port "$portx" "$protocol"; then - setconfig "$xport" "$portx" - msg_alert "\033[32m$COMMON_SUCCESS\033[0m" - return 0 - else + + if ! check_port "$portx" "$protocol"; then msg_alert "\033[31m$COMMON_FAILED\033[0m" return 1 fi + + local ports_to_check="" + [ "$xport" != "mix_port" ] && ports_to_check="$ports_to_check|$mix_port" + [ "$xport" != "redir_port" ] && ports_to_check="$ports_to_check|$redir_port" + [ "$xport" != "dns_port" ] && ports_to_check="$ports_to_check|$dns_port" + [ "$xport" != "db_port" ] && ports_to_check="$ports_to_check|$db_port" + + if echo "$ports_to_check|" | grep -q "|$portx|"; then + msg_alert "\033[31m$CHECK_PORT_DUP_ERR\033[0m" + return 1 + fi + + setconfig "$xport" "$portx" + msg_alert "\033[32m$COMMON_SUCCESS\033[0m" + return 0 } # 端口设置 diff --git a/scripts/menus/check_port.sh b/scripts/menus/check_port.sh index e41a79f8..a7135550 100644 --- a/scripts/menus/check_port.sh +++ b/scripts/menus/check_port.sh @@ -20,19 +20,6 @@ check_port() { return 1 fi - local current_port_name="" - case "$port" in - "$mix_port") current_port_name="mix_port" ;; - "$redir_port") current_port_name="redir_port" ;; - "$dns_port") current_port_name="dns_port" ;; - "$db_port") current_port_name="db_port" ;; - esac - - if [ -z "$current_port_name" ] && echo "|$mix_port|$redir_port|$dns_port|$db_port|" | grep -q "|$port|"; then - msg_alert "\033[31m$CHECK_PORT_DUP_ERR\033[0m" - return 1 - fi - local check_cmd check_cmd=$(_get_netstat_cmd "$protocol")