安装 Hermes 集成时遇到一个 root 分支的小问题:如果直接用 root 用户执行 install_hermes_memory_tencentdb.sh,脚本会反复切换到 root,最后一直循环。
环境
- Ubuntu 服务器
- 当前用户:root
- Hermes 已安装完成
- 执行脚本:
install_hermes_memory_tencentdb.sh
现象
执行脚本后反复输出:
[memory-tencentdb] Running as root, switching to root for installation...
[memory-tencentdb] Running as root, switching to root for installation...
[memory-tencentdb] Running as root, switching to root for installation...
只能手动 Ctrl+C 停掉。
原因
脚本里当前逻辑大概是:
USERNAME=$(whoami)
if [ "$(id -u)" -eq 0 ]; then
su - $USERNAME -c "bash $TEMP_SCRIPT"
fi
当当前用户本来就是 root 时:
进入后仍然是 root,于是又走同一个分支,形成递归。
建议
root 分支可以区分两种情况:
- 如果当前是 root,但目标用户不是 root,再
su - <target_user>。
- 如果当前就是 root 且目标用户也是 root,直接继续执行安装逻辑,不再
su - root。
类似:
if [ "$(id -u)" -eq 0 ] && [ "$USERNAME" != "root" ]; then
...
fi
或者提供一个明确的目标用户参数,避免 whoami 在 root 场景下被当成切换目标。
安装 Hermes 集成时遇到一个 root 分支的小问题:如果直接用 root 用户执行
install_hermes_memory_tencentdb.sh,脚本会反复切换到 root,最后一直循环。环境
install_hermes_memory_tencentdb.sh现象
执行脚本后反复输出:
只能手动
Ctrl+C停掉。原因
脚本里当前逻辑大概是:
当当前用户本来就是 root 时:
进入后仍然是 root,于是又走同一个分支,形成递归。
建议
root 分支可以区分两种情况:
su - <target_user>。su - root。类似:
或者提供一个明确的目标用户参数,避免
whoami在 root 场景下被当成切换目标。