1. linux source命令的作用?
我们可能经常需要修改到诸如/etc/profile,~/.bash_profile等这样的配置文件,
一方面我们希望所作的修改在当前的环境中立即生效;
另一方面也希望所作的修改可以保存起来,以便于下次系统重新系统时仍然有效,
这时使用先在~/.bash_profile这样的配置文件中修改好,再source ~/.bash_profile即可。
如果直接使用export在当前shell环境下修改,其缺点是重新启动系统后修改会丢失;
如果你修改了配置文件,再重新启动系统以便让更改生效,显得太麻烦了。
source ~/.bash_profile与. ~/.bash_profile是等效的,所以source命令又称为点命令。
2. source ~/.bash_profile != sh ~/.bash_profile,为什么?
sh-# type source
source is a shell builtin
原因是source是linux builtin command,所以source ~/.bash_profile会在当前shell下执行;
而sh ~/.bash_profile会创建一个child process(sub shell)去执行,所以环境变量的更改设置
只会影响到sub shell。
通过实验来进行验证,写一个source_test.sh的script,
#!/bin/sh
export PATH=$PATH:/my_home
echo "$PATH"
在执行source_test.sh这个script前后分别用echo $PATH来查看path,会发现没有区别;
而如果source ./source_test.sh就会发现改动的$PATH在当前shell环境下生效了,
这验证了上述分析是正确的。