我看到人们通过输入 来运行 shell 脚本./scriptname
。现在这似乎是默认方式,因为我经常看到它,但是偶尔但并不罕见,我看到他们输入sh scriptname
。这只是一个偏好问题还是两者之间存在更显着的差异./和嘘?
答案1
有一些差异。
./scriptname
要求调用的文件scriptname
是可执行的,并且它使用指定为第一行的 shell(在“shebang”中,例如 #!/bin/sh
),如果有的话。
sh scriptname
只要调用的文件scriptname
可读,它就可以工作,并且sh
无论脚本的 shebang 指定什么,它都会使用(无论是什么)。对于某些 shell,如果当前目录中不存在,则将搜索scriptname
中指定的目录,并且将读取并解释在那里找到的第一个目录(如果有)。PATH
scriptname
换一种方式,
sh scriptname
无需设置即可工作,但您可能使用错误的 shell,并且可能运行错误的脚本。
./scriptname
将尝试使用正确的 shell(或者至少是脚本作者指定的 shell,如果有的话)运行正确的脚本,但可能首先需要进行一些设置 ( chmod a+x scriptname
)。