TiUP 安装脚本可能会破坏用户的 shell startup 配置

(以bash为例)如果直接使用官方提供的 install.sh 脚本来安装 tiup 的话,脚本会往 $HOME/.bash_profile 文件中追加一行 export PATH=/path/to/tiup/:$PATH ,来修改 PATH 环境变量,方便用户在命令行下执行 tiup. 如果用户之前并没有使用 .bash_profile ,则会新建这个文件。

脚本没有考虑到用户是否已经在 .bashrc 或者 .bash_login 或者 .profile 增加了自己的配置,强行创建一个 .bash_profile 会导致用户登录之后 .bashrc/.bash_login/.profile 都不再执行

(另外,这个新的 PATH 环境变量只适用于 interactive login shell, 问题倒也不大,虽然非 login shell 用不了这个新的 PATH,但是可以写绝对路径。

通常来说是新创建的 tidb 用户,所以不会有您说的这种情况。

这里说的是执行 tiup 的机器,不是部署 tidb 集群的目标机器。执行 tiup 的机器上,可以没有 tidb 用户

目前确实没有检测用户是用的哪个配置,后面会完善起来的,感谢反馈

比较常见的两种情况是:

  1. 只有 .bashrc
  2. 同时存在 .bash_profile 和 .bashrc ,但是在 .bash_profile 中 source .bashrc

如果能获取到 root 权限,其实把这些环境变量的配置放到 /etc/profile.d/tiup.sh 中比较好,我现在就是这么做的 (我手动安装的,把 tiup 二进制文件和 root.json 都放在 /usr/local/tiup/bin 目录了)

if [ -d "/usr/local/tiup" ]; then
  export TIUP_HOME=/usr/local/tiup
fi

if [ -d "/usr/local/tiup/bin" ]; then
  export PATH=/usr/local/tiup/bin:$PATH
fi

tiup 本身是不要求有 root 权限的,所以只能往用户自己的目录里头写,还有就是需要兼容非 bash 用户,比如使用 zsh 就不是往 bash_profile 和 bashrc 里写,目前的假设就比较简单:

case $SHELL in
    *bash*) PROFILE=$HOME/.bash_profile;;
     *zsh*) PROFILE=$HOME/.zshrc;;
         *) PROFILE=$HOME/.profile;;

就只判断 SHELL 这个变量来看用户用哪种 shell

是的,所以才会有这么一个复杂的问题,用户的 shell 配置非常多样.

我看了几个其他成熟产品的安装文档,有的是提示用户把这个路径加到 PATH 里去,有的是需要用户执行 sudo 初始化一下,有的是不依赖 PATH(自己敲文件的路径而不是让shell去搜索)

:+1:

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。