使用./update.sh而不是update.sh来执行它

时间:2013-12-18 17:36:48

标签: shell

假设我有一个命令update.sh。 自从。指的是当前目录(在Linux / UNIX系统上),我认为./update.sh和update.sh应该是一样的。 但事实证明,直到我使用

    chmod +x update.sh

./ update.sh不起作用。 为什么会这样? 为什么我们有时会运行这样的命令 - ./update.sh而不是update.sh?

2 个答案:

答案 0 :(得分:2)

update.sh将在PATH中搜索具有该名称的文件。如果.不在您的路径中,则不会执行该文件。 ./update.sh表示您要执行此文件。

我想没有.你正在执行一个不同的update.sh。如果要确保当前目录中的update.sh由/ bin / sh执行,而与文件的权限无关,或者文件中的#!行将其作为

运行
 /bin/sh ./update.sh

答案 1 :(得分:1)

chmod +x <script>在您的文件上设置可执行文件位,告诉shell它可以将该文件视为可执行文件。这就是系统如何区分unix中的普通文件和可执行文件。

对于shell脚本,您也可以通过首先将它们传递到shell中来直接运行它们,如

sh ./update.sh

这样您就不需要先使用chmod +x

此外,shell只会在PATH环境指定的目录中查找脚本。

如果PATH不包含.,意思是“当前目录”,那么shell将不会在当前目录中运行任何脚本,除非您给它完整路径,在您的情况下是./update.sh。请注意,上面的可执行文件部分仍适用于此处。