概述
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 |