diff --git a/scripts/svc.sh b/scripts/svc.sh index 1a1fe3be..7741d1b1 100755 --- a/scripts/svc.sh +++ b/scripts/svc.sh @@ -1055,7 +1055,7 @@ proc_stop() { port_owner() { local port="${ENV_ADDR##*:}" if command -v ss >/dev/null 2>&1; then - ss -ltnp 2>/dev/null | awk -v p=":$port" '$4 ~ p"$" {print $0; exit}' + awk -v p=":$port" '$4 ~ p"$" {print $0; exit}' < <(ss -ltnp 2>/dev/null) fi } @@ -3801,7 +3801,7 @@ resolve_db_config() { # conffile 的 dsn 键(二进制自行读文件,连接串不经环境重复传递)。 local cf_dsn="" if [ -n "$p_conf" ] && [ -f "$p_conf" ]; then - cf_dsn="$(grep -oE '"dsn"[[:space:]]*:[[:space:]]*"[^"]*"' "$p_conf" 2>/dev/null | head -1 | sed -E 's/.*"([^"]*)"$/\1/')" + cf_dsn="$(sed -n '/"dsn"[[:space:]]*:[[:space:]]*"[^"]*"/{s//\n&/;s/.*\n"dsn"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p;q;}' "$p_conf" 2>/dev/null)" fi # mock 档与数据库配置共存 = 冲突,拒绝(行为要明确,不隐式降级)。 @@ -5479,7 +5479,7 @@ db_ref_of() { cf="$(env_kv_of "$name" conffile)" [ -z "$cf" ] && cf="$(printf '%s' "$(env_kv_of "$name" exec)" | sed -n 's/.*--config \([^ ]*\).*/\1/p')" if [ -n "$cf" ] && [ -f "$cf" ]; then - dsn="$(grep -oE '"dsn"[[:space:]]*:[[:space:]]*"[^"]*"' "$cf" 2>/dev/null | head -1 | sed -E 's/.*"([^"]*)"$/\1/')" + dsn="$(sed -n '/"dsn"[[:space:]]*:[[:space:]]*"[^"]*"/{s//\n&/;s/.*\n"dsn"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/p;q;}' "$cf" 2>/dev/null)" fi fi [ -n "$dsn" ] || return 0