文章目录
一、shell
狭义的shell是bash(或sh或…)这个进程;广义的shell是bash(或sh或…)这个进程 以及 bash的父进程的集合!下文提到的shell广义的,并且bash或sh等都用bash指代!
bash在检查输入指令时,判断是内置的还是外部的file。如果是内置的,bash将在自己的内存空间根据输入数据继续执行;如果是外部的file,bash会创建子进程,并替换为输入命令的程序,这个子进程继承了bash的环境变量!
二、环境变量
环境变量可以理解为存储在bash进程内存空间的特殊内存块的变量。环境变量与普通变量的区别是,环境变量可以被bash的子进程继承,而普通变量不行。看如下范例:
root@study:~# name=haha # 设置普通变量
root@study:~# echo ${name} # 打印成功
haha
root@study:~# bash # 切换bash,为上一个bash的子进程
root@study:~# echo ${name} # 打印为空,说明这个子bash没有继承到普通变量
root@study:~# exit # 回到原来的bash
exit
root@study:~# export name # export刚刚定义的变量,使其成为环境变量
root@study:~# bash # 再次创建并进入子bash
root@study:~# echo ${name} # 打印成功,说明这个子bash继承了环境变量
haha
三、bash环境配置文件
bash的环境变量不是凭空产生的。在计算机运行过程中,shell根据某些磁盘文件初始化环境变量并最终保存在bash内存空间里。
在展开问题之前,我们先了解两个概念,分别是 login shell 与 non-login shell。废话不多说,直接上图吧!