你这个问题太有趣了,忍不住测了好久。
修改你的脚本,如下所示:在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"