shell script执行方式主要分为两种,一种是在子进程下执行,另一种是在父进程下执行。两种不同的方式有很大的区别。
常见的bash x.sh 或 sh x.sh 或 ./ x.sh(一般会出现权限不够的情况,需要修改文件权限或直接修改生成文件的默认权限) 或 不在当前目录下,带路径的sh /tmp/ *.sh等都属于是在子进程下执行的。在执行脚本时会使用一个新的bash环境,换句话说该script是在子进程下的bash中执行的。而在子进程中执行完成后,子进程的各个变量或操作并不会传到父进程里。以cd命令为例:当你将cd写进script,执行后你会发现你的当前目录并没有改变。
另外一种是source x.sh 或source /tmp/x.sh 。同样的cd命令写进脚本执行后你会发现你当前的工作目录已经改变。这是因为该script是在父进程中执行。这也是你不用重启系统就可以让某些设置生效的原因。