调用shell脚本时sh和./有什么区别?

调用shell脚本时sh和./有什么区别?

我看到人们通过输入 来运行 shell 脚本./scriptname。现在这似乎是默认方式,因为我经常看到它,但是偶尔但并不罕见,我看到他们输入sh scriptname。这只是一个偏好问题还是两者之间存在更显着的差异./

答案1

有一些差异。

./scriptname

要求调用的文件scriptname是可执行的,并且它使用指定为第一行的 shell(在“shebang”中,例如 #!/bin/sh),如果有的话。

sh scriptname

只要调用的文件scriptname可读,它就可以工作,并且sh无论脚本的 shebang 指定什么,它都会使用(无论是什么)。对于某些 shell,如果当前目录中不存在,则将搜索scriptname中指定的目录,并且将读取并解释在那里找到的第一个目录(如果有)。PATHscriptname

换一种方式,

sh scriptname

无需设置即可工作,但您可能使用错误的 shell,并且可能运行错误的脚本。

./scriptname

将尝试使用正确的 shell(或者至少是脚本作者指定的 shell,如果有的话)运行正确的脚本,但可能首先需要进行一些设置 ( chmod a+x scriptname)。

相关内容