weixin_43674800 2022-11-28 20:19 采纳率: 85.7%
浏览 59
已结题

脚本中存在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

  • 写回答

3条回答 默认 最新

  • 千册 Linux领域新星创作者 2022-11-28 23:23
    关注

    你这个问题太有趣了,忍不住测了好久。
    修改你的脚本,如下所示:在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"
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月7日
  • 已采纳回答 11月29日
  • 修改了问题 11月28日
  • 修改了问题 11月28日
  • 展开全部

悬赏问题

  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题