概述
Shell script有三种执行方式,相对/绝对路径直接执行
、sh命令执行
、source命令执行
,那这三种方式各有什么区别呢?在此通过test.sh
来验证与总结。
验证
新建test.sh
:
1 | ! /bin/bash |
默认权限为
验证./test.sh
直接执行方式:
1 | ./test.sh |
执行结果为:
添加x权限
,再执行:
1 | chmod u+x test.sh |
执行结果为:
查看命令执行状态:
1 | echo $? |
执行结果为:
可以看出返回码为测试码111,因此:
验证了./test.sh
执行方式为打开一个subshell读取再执行,需要x权限
验证sh ./test.sh
执行方式:
去除x权限
,再执行:
1 | chmod u-x test.sh |
执行结果为:
查看命令执行状态:
1 | echo $? |
执行结果为:
文件没有x权限
依然执行成功,同时可以看出返回码为测试码111,因此:
验证了sh ./test.sh
执行方式亦为打开一个subshell读取Shell script再执行,但不需要x权限
验证source ./test.sh
执行方式:
注:source
命令即为.
命令
1 | source ./test.sh |
执行结果为:
1 | 当前shell窗口终止退出 |
删除test.sh
中exit 111
语句,再执行:
执行结果为:
文件没有x权限
,且需删除exit
语句才正常输出Hello, world!
,因此:
验证了sh ./test.sh
执行方式为在当前shell上读取执行,不需要x权限
总结
执行方式 | subshell? | x权限? |
---|---|---|
./test.sh | √ | √ |
sh ./test.sh | √ | |
source ./test.sh |