From ce8623ccb9395d20086a33580b11c4738233db7d Mon Sep 17 00:00:00 2001 From: Jz0ojiang Date: Sun, 9 Aug 2026 18:57:26 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=B2=A1=E6=9C=89=E5=85=A5=E7=AB=99?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E6=97=B6=E4=B8=8D=E8=AF=A5=E6=8A=A5=E3=80=8C?= =?UTF-8?q?=E7=AC=AC=20N=20=E8=A1=8C=E5=87=BA=E9=94=99=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 进「配置管理 → 入站端口」而配置里一条入站都没有时,脚本会连报两次 错误然后退出。 cfg_listener_list 末尾是 grep 管道,grep 无匹配时退出码为 1,配上 pipefail 就把整个函数判为失败,触发 ERR trap。"没有入站"是正常状态, 不是错误,末尾补 || true。 两次报错是同一根因的两次现身:第一次在 $() 子 shell 里,只杀掉子 shell; 第二次是外层赋值继承了非零码,才真正终止脚本。 --- mihomo-up.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mihomo-up.sh b/mihomo-up.sh index cd0bda9..62b2486 100644 --- a/mihomo-up.sh +++ b/mihomo-up.sh @@ -949,12 +949,14 @@ cfg_backup_menu() { # 每条入站写成一行 YAML 流式映射并带标记,加/删就是加一行/删一行,不动别处。 LISTENER_TAG="# mihomo-up:listener" -cfg_listener_list() { # 每行输出「序号 整行内容」 +cfg_listener_list() { # 每行输出「序号 原文件行号 整行内容」 local f; f="$(conf_file)" [[ -f "$f" ]] || return 0 + # 末尾的 || true 不能省: 一条入站都没有时 grep 退出码是 1,配上 pipefail + # 会让整个函数返回失败,进而触发 ERR trap —— 但"没有入站"是正常状态,不是错误 grep -n "$LISTENER_TAG" "$f" 2>/dev/null \ | sed -E 's/^([0-9]+):[[:space:]]*/\1\t/' \ - | awk -F'\t' '{ printf "%d\t%s\t%s\n", NR, $1, $2 }' + | awk -F'\t' '{ printf "%d\t%s\t%s\n", NR, $1, $2 }' || true } cfg_listener_show() {