(以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,但是可以写绝对路径。
)
yilong
(yi888long)
2
通常来说是新创建的 tidb 用户,所以不会有您说的这种情况。
这里说的是执行 tiup 的机器,不是部署 tidb 集群的目标机器。执行 tiup 的机器上,可以没有 tidb 用户
lucklove
(Lucklove)
4
目前确实没有检测用户是用的哪个配置,后面会完善起来的,感谢反馈
比较常见的两种情况是:
- 只有 .bashrc
- 同时存在 .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
lucklove
(Lucklove)
6
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去搜索)
system
(system)
关闭
9
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。