脚本中存在source /etc/profile,但是脚本执行完毕后还需要再次执行才能生效,不知道为什么

问题遇到的现象和发生背景

脚本中存在source /etc/profile,但是脚本执行完毕后还需要再次执行才能生效,不知道为什么

用代码块功能插入代码,请勿粘贴截图
#添加环境变量
MYSQL_PATH=/usr/local/mysql
echo "PATH=$MYSQL_PATH/bin/:$PATH">>/etc/profile
source /etc/profile
运行结果及报错内容

一键安装mysql的脚本,脚本中添加了环境变量如代码,在脚本中确实也生效了,但是脚本结束后,并不能执行 mysql -u命令,必须手动source /etc/profile才能生效,或者不执行source /etc/profile,关闭当前终端,再次连接终端后也能生效,不知道为什么

我的解答思路和尝试过的方法

一键安装mysql的脚本,脚本中添加了环境变量如代码,在脚本中确实也生效了,但是脚本结束后,并不能执行 mysql -u命令,必须手动source /etc/profile才能生效,或者不执行source /etc/profile,关闭当前终端,再次连接终端后也能生效,不知道为什么

我想要达到的结果

脚本执行结束后,就能直接执行mysql -u命令,不再手动source /etc/profile

你这个问题太有趣了,忍不住测了好久。
修改你的脚本,如下所示:在PATH前面加export,脚本这里还加了一条判断该路径是否已经添加到PATH,如果加过了,就不再添加了

#添加环境变量
echo 'boss.sh pid = '$$
MYSQL_PATH=/usr/local/mysql
val=$(echo $PATH | grep "/usr/local/mysql/bin" |wc -l)
echo 'val:'$val
[[ ${val} -eq 0 ]] && echo "export PATH=$MYSQL_PATH/bin/:$PATH">>/etc/profile || echo "mysql is already install"
source /etc/profile


使用source执行这个脚本:从执行结果可知,执行多次也不会重复添加了。
脚本的进程号和终端是相同的,这点是使用source执行的基本原理。也是这里能否生效的关键。

root@ubuntu:/home/csdn/val# source boss.sh
boss.sh pid = 77449
val:0
root@ubuntu:/home/csdn/val# source boss.sh
boss.sh pid = 77449
val:1
mysql is already install
root@ubuntu:/home/csdn/val# echo $PATH
/usr/local/mysql/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
root@ubuntu:/home/csdn/val# mysql
i'm mysql
root@ubuntu:/home/csdn/val# tail -n 1 /etc/profile
export PATH=/usr/local/mysql/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
root@ubuntu:/home/csdn/val#





这个mysql是个脚本假冒的:

echo "i'm mysql"


这样安装时有弊端的,我可以教你如何安装mysql

你是编辑了环境变量文件 ,新增了环境变量路径,肯定要重新加载一下环境变量啊。
加载一次,就OK了,日后照样用。
日常安装JAVA,弄环境变量不是一个道理吗?添加好配置,重新加载变量文件,然后后面就可以用了(因为开终端都加载了)。