./script.sh和sh script.sh之间的区别
"./script.sh"和"sh script.sh"之间的区别是什么?
"sh script.sh"命令告诉"sh"程序运行脚本。
"./script.sh"命令告诉系统使用脚本定义的程序来运行脚本(或者如果没有定义程序,使用默认的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"时,你将其视为可执行文件,因此需要设置可执行权限位。