记录:执行shell脚本'source /etc/profile'重载配置文件不生效的问题
前言
在折腾服务器时我会自己安装一些环境,例如jdk,mysql,redis,node,docker等,这些环境我一般是自己制作一个脚本来执行它,例如node环境安装脚本:
1 | yum install -y tar make |
每次执行完也都能看到node的版本,但自己手动node -v就不能执行成功提示-bash: node: command not found,每次都要检查脚本是否有问题,误打误撞运行了source /etc/profile,就又成功安装环境,显示版本号了,后面也就不理了。这些天又出现这样的问题,我想是时候找一找根源了。
搜索问题
我在必应上搜索了:为什么sh脚本修改的配置文件不能source,回车就看到了类似问题的答案了:

原文:解决shell脚本中”source /etc/profile”重载配置文件不生效的问题-腾讯云开发者社区-腾讯云
找到原因了
是因为我使用了sh install-node.sh来执行脚本,这样当前shell进程会分出一个子shell进行来执行node环境安装脚本
子shell只能继承父shell环境变量,不能修改父shell的环境变量
这也是为什么我可以在sh install-node.sh能看到node -v 的版本号,而自己打node -v 提示 command not found
解决
source install-node.sh
凡是脚本中使用source /etc/profile,就要使用命令source install-node.sh执行
参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 枫叶!
评论


