From 0f86c331bf780947fbbe84a8697eeb5c8d39def8 Mon Sep 17 00:00:00 2001 From: JGZYES Date: Sat, 5 Sep 2026 14:58:20 +0800 Subject: [PATCH] install.sh: after install, clear stale command hash + print 'hash -r' hint A bash shell may still hash pmm to an old (now-deleted) path such as ~/.pmm/root/bin/pmm, so running pmm after a fresh install fails with 'No such file or directory' until 'hash -r'. Install scripts run in a subshell and cannot clear the interactive shell's hash, so run hash -r best-effort and print an explicit 'hash -r (zsh: rehash)' instruction. --- web/download/install.sh | 13 ++++++++++--- web/install.sh | 13 ++++++++++--- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/web/download/install.sh b/web/download/install.sh index 87f3983..3b9f452 100644 --- a/web/download/install.sh +++ b/web/download/install.sh @@ -47,11 +47,18 @@ fi mkdir -p "$(dirname "$DEST")" cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP" -# ---- PATH 提示 ---- +# ---- 安装完成:提示如何让当前 shell 立即用上新 pmm ---- +DEST_DIR="$(dirname "$DEST")" case ":$PATH:" in - *":$(dirname "$DEST"):"*) ;; - *) echo "pmm: 请将 $(dirname "$DEST") 加入 PATH(或重新登录 shell)" ;; + *":$DEST_DIR:"*) ;; + *) echo "pmm: 请将 $DEST_DIR 加入 PATH(或重新登录 shell)" ;; esac +# 旧 shell 可能把 pmm 命中在已不存在的旧路径(如 ~/.pmm/root/bin/pmm),导致 +# 报 "No such file or directory"。bash 用 `hash -r`、zsh 用 `rehash` +# 重新按 PATH 解析。子脚本无法清父 shell 的命中缓存,这里尽力清一次并给出提示。 +hash -r 2>/dev/null || true + echo "pmm: 安装完成 -> $DEST" +echo "pmm: 若当前 shell 里 pmm 仍不可用/报错,请先执行: hash -r (zsh 用: rehash)" "$DEST" -v 2>/dev/null || true diff --git a/web/install.sh b/web/install.sh index 87f3983..3b9f452 100644 --- a/web/install.sh +++ b/web/install.sh @@ -47,11 +47,18 @@ fi mkdir -p "$(dirname "$DEST")" cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP" -# ---- PATH 提示 ---- +# ---- 安装完成:提示如何让当前 shell 立即用上新 pmm ---- +DEST_DIR="$(dirname "$DEST")" case ":$PATH:" in - *":$(dirname "$DEST"):"*) ;; - *) echo "pmm: 请将 $(dirname "$DEST") 加入 PATH(或重新登录 shell)" ;; + *":$DEST_DIR:"*) ;; + *) echo "pmm: 请将 $DEST_DIR 加入 PATH(或重新登录 shell)" ;; esac +# 旧 shell 可能把 pmm 命中在已不存在的旧路径(如 ~/.pmm/root/bin/pmm),导致 +# 报 "No such file or directory"。bash 用 `hash -r`、zsh 用 `rehash` +# 重新按 PATH 解析。子脚本无法清父 shell 的命中缓存,这里尽力清一次并给出提示。 +hash -r 2>/dev/null || true + echo "pmm: 安装完成 -> $DEST" +echo "pmm: 若当前 shell 里 pmm 仍不可用/报错,请先执行: hash -r (zsh 用: rehash)" "$DEST" -v 2>/dev/null || true