现在的位置: 首页 > 综合 > 正文

bash xx.sh与sh xx.sh以及./xx.sh的区别

2013年06月14日 ⁄ 综合 ⁄ 共 615字 ⁄ 字号 评论关闭

在ubuntu中,sh只是bash的一个链接,执行的程序都是一样的,命令解释器是一样的。但bash xx.sh和./xx.sh和sh xx.sh还是有不同的,bash xx.sh和sh xxx.sh都已经是直接执行命令,脚本程序作为这个命令的参数,不存在可行性权限的问题,而./xx.sh则必须具有可执行权限,在部分自动化的脚本中出现像./xx.sh这个的语句可能会出错。然后,三条命令本身的语句不一样,部分脚本程序在执行时喜欢检测一下命令名本身([ "$0"]),对不同的命令会作出不同的反应,这个是取决与脚本本身的。

 

sh全部符合POSIX标准,而bash则有很多自己的扩展,不完全符合POSIX标准。非严格意义上说,sh可看作是bash的子集。如果你的系统上是bash,用sh script.sh 执行脚本,实际上在工作的命令解释器还是bash(这种情况下sh被默认设置为bash的一个链接)。但bash内部有一套模拟sh行为的实现,所以能够以类似sh的方式(完全符合POSIX标准)来工作,假装自己是sh。

 

sh命令是shell的意思,用这个命令执行脚本系统会产生一个子进程(pid 与父进程也不一样),在这个子进程定义的变量,在脚本执行完后,子进程结束后无法带至父进程。
用.命令与source命令是一样的意思,就是本进程(不产生子进程)直接去执行脚本,如果脚本里有定义或者改变变量值,那这个变量值在程序结束后依然有效(同一个进程嘛)。 

 

抱歉!评论已关闭.