执行命令
source 和 .
source和 . 这两个都是shell自带的内建命令,这两个命令是是完全一样的。
使用 type source 和 type . 可以看出它们都是内建命令;使用 help source 和 help . 也可以看出这两个命令的作用一模一样。
source和. 在当前shell中执行,不会启动一个新的子shell进程。所有在脚本中设置的变量将成为当前Shell的一部分。
修改.bashrc后使其生效时,只能使用source或. ,因为设置的环境变量需要在本shell中生效。若使用其他的命令,会在子进程中export环境变量,这对于父shell是没有影响的,因此并不会生效。
sh、bash和dash
sh 另起一个子shell进程,在子shell中执行脚本里面的语句。该子shell继承父shell的环境变量,但不会继承普通变量,也就是没有被 export的变量。
dash Shell 比bash Shell小的多,符合POSIX标准。Ubuntu继承了Debian,所以从Ubuntu 6.10开始默认是dash shell。
而sh是到bash或dash的软连接,所以本质上还是bash或dash来解析这shell脚本。
./
./ 是用来执行一切可执行文件的方法,不仅仅可以用来执行shell脚本。使用 ./ 执行的文件必须是可执行文件,文件必须有 x 权限。
./ 也会另起一个shell进行可执行文件的执行,在子shell中执行脚本里面的语句。该子shell继承父shell的环境变量,但不会继承普通变量,也就是没有被 export的变量。