转自:https://www.jianshu.com/p/a3fbb3af9ab7
经常会看到在修改了某些环境变量之后会执行source命令,到底source命令做了那些事?让我们来探究一下。
source的作用
source命令:
source命令也称为“点命令”,也就是一个点符号(.),是bash的内部命令。
功能:使 Shell 读入指定的 Shell 程序文件并依次执行文件中的所有语句
使用范例:
source filename
. filename
(中间有空格)
注意:上述两种表达方式都是正确的并且等效的
为什么在修改了环境变量后执行source命令
例如当我修改了 /etc/profile 文件,我想让它立刻生效,而不用重新登录;这时就想到用 source 命令,如:source /etc/profile
。这样就重新执行刚修改的初始化文件,使之立即生效
source filename
与 sh filename
及 ./filename
执行脚本的区别在那里呢?
当shell脚本具有可执行权限时,用
sh filename
与./filename
执行脚本是没有区别得。./filename
是因为当前目录没有在 PATH 中,所有”.”是用来表示当前目录的。sh filename
重新建立一个子 shell,在子 shell 中执行脚本里面的语句,该子 shell 继承父 shell 的环境变量,但子 shell 新建的、改变的变量不会被带回父 shell,除非使用 export。source filename
:这个命令其实只是简单地读取脚本里面的语句依次在当前 shell 里面执行,没有建立新的子 shell。那么脚本里面所有新建、改变变量的语句都会保存在当前 shell 里面。(当这个 shell 关闭后就失效了)
举例说明:
- 新建一个 test.sh 脚本,内容为:A=1
- 然后使其可执行
chmod +x test.sh
- 运行
sh test.sh
后,echo $A
,显示为空,因为 A=1 并未传回给当前 shell - 运行
./test.sh
后,也是一样的效果 - 运行
source test.sh
或者. test.sh
,然后echo $A
,则会显示 1,说明 A=1 的变量在当前 shell 中。