主要有两种方式执行shell脚本
1)source test.bsh
2)sh test.bsh
1)souce执行脚本文件会在父程序中执行,各项动作都会在原本的bash内生效,执行过程不另开进程,脚本文件中设定的变量在当前shell中可以看到;
如下例子:
其中sh文件内容如下:
就是通过read命令从命令行中读取两个字符串firstname和lastname,作为一个完整的人名最后在屏幕上输出。source执行该文本文件时正确输出,source还可以用“.”直接替换;
source执行文件可以这样理解:
2)sh执行脚本文件是在当前进程另开子进程来执行脚本命令,脚本文件中设定的变量在当前shell中不能看到。使用这种执行方式时,其实script实在子程序的bash中执行的,当子程序完成之后,子程序内的各项变量或者动作将会结束而不会传回到父程序中。对比第一张图我们可以得到下面的结果:
当sh文件执行完毕之后,子程序bash中的所有数据便被移除。可以这样理解
"./"执行结果和sh执行结果相同。
值得注意的是:一般当我们想要让某些写入~/.bashrc(如环境变量)生效的时候,都需要注销系统,重新开启服务,当我们不注销系统就想要使写入生效的时候,我们就可以使用source ~/.bashrc而不是使用sh ~/.bashrc.