镜像自地址
https://github.com/JGZYES/ParlzPackageManger.git
已同步 2026-09-11 08:52:45 +08:00
install.sh: detect which pmm the shell resolves to and give exact fix
When WSL inherits a Windows-side pmm (e.g. /mnt/d/.pmm/root/bin) ahead of the fresh install, 'pmm' stays broken/wrong even after an install. The installer now runs 'command -v pmm' and, if it isn't the freshly installed binary, prints the precise 'export PATH=... ; hash -r' steps (and notes if the hit is under /mnt/, i.e. a Windows pmm leaked into WSL's PATH).
这个提交包含在:
+23
-5
@@ -47,18 +47,36 @@ fi
|
|||||||
mkdir -p "$(dirname "$DEST")"
|
mkdir -p "$(dirname "$DEST")"
|
||||||
cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP"
|
cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP"
|
||||||
|
|
||||||
# ---- 安装完成:提示如何让当前 shell 立即用上新 pmm ----
|
# ---- 安装完成:检测当前 shell 会解析到哪个 pmm,并给出精确指引 ----
|
||||||
DEST_DIR="$(dirname "$DEST")"
|
DEST_DIR="$(dirname "$DEST")"
|
||||||
case ":$PATH:" in
|
case ":$PATH:" in
|
||||||
*":$DEST_DIR:"*) ;;
|
*":$DEST_DIR:"*) ;;
|
||||||
*) echo "pmm: 请将 $DEST_DIR 加入 PATH(或重新登录 shell)" ;;
|
*) echo "pmm: 请将 $DEST_DIR 加入 PATH(或重新登录 shell)" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# 旧 shell 可能把 pmm 命中在已不存在的旧路径(如 ~/.pmm/root/bin/pmm),导致
|
# bash 可能仍把 pmm 命中在旧路径(如已删除的 ~/.pmm/root/bin/pmm),或命中到
|
||||||
# 报 "No such file or directory"。bash 用 `hash -r`、zsh 用 `rehash`
|
# WSL 里 >/mnt/ 下 Windows 侧安装的 pmm。子脚本清不了父 shell 缓存,但 command -v
|
||||||
# 重新按 PATH 解析。子脚本无法清父 shell 的命中缓存,这里尽力清一次并给出提示。
|
# 能报出“重新解析 PATH 后”会命中哪个 pmm,据此给出精确的三步操作。
|
||||||
hash -r 2>/dev/null || true
|
hash -r 2>/dev/null || true
|
||||||
|
FOUND="$(command -v pmm 2>/dev/null || true)"
|
||||||
|
|
||||||
|
echo ""
|
||||||
echo "pmm: 安装完成 -> $DEST"
|
echo "pmm: 安装完成 -> $DEST"
|
||||||
echo "pmm: 若当前 shell 里 pmm 仍不可用/报错,请先执行: hash -r (zsh 用: rehash)"
|
|
||||||
"$DEST" -v 2>/dev/null || true
|
"$DEST" -v 2>/dev/null || true
|
||||||
|
|
||||||
|
if [ -n "$FOUND" ] && [ "$FOUND" != "$DEST" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "pmm: 注意: 当前 shell 里的 'pmm' 仍会命中: $FOUND"
|
||||||
|
echo "pmm: (而不是刚安装的 $DEST)"
|
||||||
|
case "$FOUND" in
|
||||||
|
/mnt/*) echo "pmm: 它在 /mnt/ 下,通常是 Windows 侧安装的 pmm 经由 WSL 的 PATH 被带进来。" ;;
|
||||||
|
esac
|
||||||
|
echo "pmm: 请在当前终端执行下面三条,让 WSL 优先用刚装的 Linux 版:"
|
||||||
|
echo "pmm:"
|
||||||
|
echo "pmm: export PATH=\"$DEST_DIR:\$PATH\""
|
||||||
|
echo "pmm: hash -r"
|
||||||
|
echo "pmm: which pmm && pmm -v"
|
||||||
|
echo "pmm:"
|
||||||
|
echo "pmm: 永久生效(写入 ~/.bashrc 后 source):"
|
||||||
|
echo "pmm: echo 'export PATH=\"$DEST_DIR:\$PATH\"' >> ~/.bashrc && source ~/.bashrc"
|
||||||
|
fi
|
||||||
|
|||||||
+23
-5
@@ -47,18 +47,36 @@ fi
|
|||||||
mkdir -p "$(dirname "$DEST")"
|
mkdir -p "$(dirname "$DEST")"
|
||||||
cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP"
|
cp "$TMP" "$DEST" && chmod +x "$DEST" && rm -f "$TMP"
|
||||||
|
|
||||||
# ---- 安装完成:提示如何让当前 shell 立即用上新 pmm ----
|
# ---- 安装完成:检测当前 shell 会解析到哪个 pmm,并给出精确指引 ----
|
||||||
DEST_DIR="$(dirname "$DEST")"
|
DEST_DIR="$(dirname "$DEST")"
|
||||||
case ":$PATH:" in
|
case ":$PATH:" in
|
||||||
*":$DEST_DIR:"*) ;;
|
*":$DEST_DIR:"*) ;;
|
||||||
*) echo "pmm: 请将 $DEST_DIR 加入 PATH(或重新登录 shell)" ;;
|
*) echo "pmm: 请将 $DEST_DIR 加入 PATH(或重新登录 shell)" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
# 旧 shell 可能把 pmm 命中在已不存在的旧路径(如 ~/.pmm/root/bin/pmm),导致
|
# bash 可能仍把 pmm 命中在旧路径(如已删除的 ~/.pmm/root/bin/pmm),或命中到
|
||||||
# 报 "No such file or directory"。bash 用 `hash -r`、zsh 用 `rehash`
|
# WSL 里 >/mnt/ 下 Windows 侧安装的 pmm。子脚本清不了父 shell 缓存,但 command -v
|
||||||
# 重新按 PATH 解析。子脚本无法清父 shell 的命中缓存,这里尽力清一次并给出提示。
|
# 能报出“重新解析 PATH 后”会命中哪个 pmm,据此给出精确的三步操作。
|
||||||
hash -r 2>/dev/null || true
|
hash -r 2>/dev/null || true
|
||||||
|
FOUND="$(command -v pmm 2>/dev/null || true)"
|
||||||
|
|
||||||
|
echo ""
|
||||||
echo "pmm: 安装完成 -> $DEST"
|
echo "pmm: 安装完成 -> $DEST"
|
||||||
echo "pmm: 若当前 shell 里 pmm 仍不可用/报错,请先执行: hash -r (zsh 用: rehash)"
|
|
||||||
"$DEST" -v 2>/dev/null || true
|
"$DEST" -v 2>/dev/null || true
|
||||||
|
|
||||||
|
if [ -n "$FOUND" ] && [ "$FOUND" != "$DEST" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "pmm: 注意: 当前 shell 里的 'pmm' 仍会命中: $FOUND"
|
||||||
|
echo "pmm: (而不是刚安装的 $DEST)"
|
||||||
|
case "$FOUND" in
|
||||||
|
/mnt/*) echo "pmm: 它在 /mnt/ 下,通常是 Windows 侧安装的 pmm 经由 WSL 的 PATH 被带进来。" ;;
|
||||||
|
esac
|
||||||
|
echo "pmm: 请在当前终端执行下面三条,让 WSL 优先用刚装的 Linux 版:"
|
||||||
|
echo "pmm:"
|
||||||
|
echo "pmm: export PATH=\"$DEST_DIR:\$PATH\""
|
||||||
|
echo "pmm: hash -r"
|
||||||
|
echo "pmm: which pmm && pmm -v"
|
||||||
|
echo "pmm:"
|
||||||
|
echo "pmm: 永久生效(写入 ~/.bashrc 后 source):"
|
||||||
|
echo "pmm: echo 'export PATH=\"$DEST_DIR:\$PATH\"' >> ~/.bashrc && source ~/.bashrc"
|
||||||
|
fi
|
||||||
|
|||||||
在新工单中引用
屏蔽一个用户