fix: 没有入站端口时不该报「第 N 行出错」

进「配置管理 → 入站端口」而配置里一条入站都没有时,脚本会连报两次
错误然后退出。

cfg_listener_list 末尾是 grep 管道,grep 无匹配时退出码为 1,配上
pipefail 就把整个函数判为失败,触发 ERR trap。"没有入站"是正常状态,
不是错误,末尾补 || true。

两次报错是同一根因的两次现身:第一次在 $() 子 shell 里,只杀掉子 shell;
第二次是外层赋值继承了非零码,才真正终止脚本。
This commit is contained in:
2026-08-09 18:57:26 +08:00
parent c756a92ba3
commit ce8623ccb9
+4 -2
View File
@@ -949,12 +949,14 @@ cfg_backup_menu() {
# 每条入站写成一行 YAML 流式映射并带标记,加/删就是加一行/删一行,不动别处。
LISTENER_TAG="# mihomo-up:listener"
cfg_listener_list() { # 每行输出「序号 <TAB> 整行内容」
cfg_listener_list() { # 每行输出「序号 <TAB> 原文件行号 <TAB> 整行内容」
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() {