.sh 文件需要 `sh app.sh`,即使有 `#!/bin/bash` 行

.sh 文件需要 `sh app.sh`,即使有 `#!/bin/bash` 行

我的印象是,如果我加上这一行

#!/bin/bash

在我的文件开头,它将被识别为一个 bash 脚本,我只需通过

file.sh

代替

sh file.sh

但在我的例子中,给出了类似于的file.sh东西。这是为什么呢?test.shtest.sh: command not found

更新

我注意到我需要使用./。但我认为它无论如何都会在当前目录中查找?

./test.sh

答案1

首先需要确保该文件是可执行的:

chmod +x file.sh

然后要运行它,您要么需要将它放在您的 PATH 中,即操作系统在寻找要运行的文件时搜索的文件目录之一,您可以使用 找到它echo $PATH,要么您需要输入:

./file.sh

而不仅仅是输入file.sh

如果它在您的 PATH 中,您可以直接输入file.sh,我推荐这样做。 一个好地方是~/bin。 如果不存在该文件夹,请创建该文件夹,在 Ubuntu 下,它将在您登录时添加到您的路径中。

答案2

您需要使用 ./file.sh 启动它,因为当前目录不在 PATH 中。

如果这还不够,因为你错过了 frabjous 的建议,你应该以chmod a+xshebang 开头来启动程序#!/bin/bash

bash file.sh

不是

sh file.sh

即使 sh 是 /bin/bash 的符号链接。

shell 检查它是如何被调用的,并且可以被调用以sh在兼容模式下运行,因此它可能无法处理某些 bashism,如果被调用则可能会起作用bash file.sh

这不是你的问题,但如果你不知道这些细微的区别,那可能会成为你的问题。

相关内容