记录:执行 shell 脚本'source /etc/profile' 重载配置文件不生效的问题
前言
在折腾服务器时我会自己安装一些环境,例如 jdk,mysql,redis,node,docker 等,这些环境我一般是自己制作一个脚本来执行它,例如 node 环境安装脚本:
shell
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 执行
参考文章
解决 shell 脚本中”source /etc/profile” 重载配置文件不生效的问题 - 腾讯云开发者社区 - 腾讯云
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 枫叶!