我使用无效权限-rw-r-r-1编写了脚本。如果我运行这个sh script.sh,它会被执行,同时用执行/脚本抛出权限被拒绝。
这两个命令之间有什么区别?为什么不需要更改"sh script.sh"的权限?
[root@ipsafe]#sh test.sh
测试
[root@ip安全]#/test.sh
-bash:/test.sh:权限被拒绝
这两个命令之间有什么区别?
sh script.sh
告诉sh
程序运行脚本。
./script.sh
表示使用脚本定义的程序运行脚本,该程序在开始时带有hashbang(如果不是hashbang,则在默认shell中(。
请注意,根据脚本是否有hashbang,最终可能会得到完全不同的结果,原因有两个:
-
即使
sh
是bash
,当它被调用为sh
时,它也会在有限的兼容性模式下运行(感谢Charles Duffy在问题评论中指出这一点(。 -
脚本可能使用与shell完全不同的东西运行。它可能以
#!/bin/node
开始,并包含要在Node.js中运行的JavaScript代码。在这种情况下,./script.sh
会工作,但sh script.sh
会失败,因为sh
会将脚本视为shell脚本。
为什么不需要更改"sh script.sh"的权限?
因为在这种情况下,您正在执行的是sh
程序,该程序被标记为可执行(然后是sh
读取并执行脚本中的命令,但脚本不必是可执行的(。当您执行./script.sh
时,您将其视为可执行文件,因此它需要设置可执行权限位。