在众多Linux发行版中bash shell 可谓是随处可见。作为众多发行版的首选shell,对于bash shell的学习对我们来说,显得格外重要。在学习bash shell的过程中,bash、sh、source及英文输入状态下的点号经常交替出现,他们看起来作用都差不多,但是深究下去,他们也有着不小的区别与联系。下面就让我们以具体实验来看一下它们之间的区别与联系吧!
一、查看当前系统支持的shell类型
以上列出了当前系统所支持的shell类型。查看shell的历史我们可以知道,我们通常所说的bash shell(bash)全称为GNU Bourne-Again SHell。在目前的发行版中,sh已经成为bash的一个软连接。在man sh的时候大家都会发现,其实man出来的手册时bash的内容。
二、建立实验脚本
a.sh的内容如下:
b.sh的内容如下:
三、具体探讨这几种执行方式的区别与联系
bash、sh执行a.sh和b.sh
可以看出来,bash及sh执行的脚本效果是一致的。
source及"."分别执行a.sh、b.sh。
从上面的2个代码块中,我们可以看出,b.sh脚本直接引用了a.sh中的变了,如果我们依次执行几个有关联的脚本就可以采用这种方式,否则则使用bash及sh比较恰当。
注意:代码块2中的点与脚本路径中间有至少一个空格。
接下来,我们继续以点“.”来运行a.sh及b.sh。
这个点与执行脚本之间无空格,表示执行当前目录下的a.sh脚本,相当于~/a.sh。b.sh也是一样的结果,无需讨论。
从以上代码块中不难看出:通过"."(无空格)来执行脚本时需要给需要执行的脚本加上执行权限,否则无法执行。加了权限之后,执行效果与bash及sh一致,不继承变量。
四、结论
bash与sh在对于脚本执行来说,效果一致,不继承除了当前shell之外的变量值。在无空格“.”且有执行权限的脚本执行中,效果与bash及sh一致。
source及带空格的“.”执行效果一致,且会继承其他shell的变量。
除了不带空格的“.”之外,其他脚本的执行都不需要给脚本增加执行权限。
五、一个小疑问
请大家看一下以下命令的效果:
领取专属 10元无门槛券
私享最新 技术干货