在用bash调用脚本的时候,父进程接收到命令,发现不是内建命令,于是会创建一个和自己一模一样的shell进程来执行这个外部命令。这个子进程中设置了自己的运行的变量。而在此时,父进程的变量并没有改变。子进程执行完毕,消亡。这是一直等待的父进程来继续接收命令。
而在用source来执行脚本的时候,不会创建子进程,而是在父进程中直接执行。所以当需要程序修改当前shell本身的变量的时候,使用source命令。
举例:
root@sjt-VirtualBox:~# vi a.sh
#!bin/bash
myname=a
export myname
root@sjt-VirtualBox:~# bash a.sh
root@sjt-VirtualBox:~# echo $myname
//显示空白,说明变量myname没有被设置
root@sjt-VirtualBox:~# source a.sh
root@sjt-VirtualBox:~# echo $myname
a //变量myname被设置为a