为什么我必须进入我的私人 bin 文件夹才能执行 .sh 脚本?

为什么我必须进入我的私人 bin 文件夹才能执行 .sh 脚本?

我的主目录中有一个私有的 bin 文件夹。它也在我的路径中。如果我尝试从系统中除该文件夹之外的任何地方运行脚本,我会得到

  sh: 0: Can't open [name of script].sh

如果我执行类似的sh ~/bin/killwine.sh事情

我希望能够在任何地方执行脚本,而无需改变我的位置。

我究竟做错了什么?

答案1

当您输入时sh somescript.sh,系统会sh在路径中查找somescript.sh

然后系统会查找sh并将参数传递somescript.sh给它。然后在当前文件夹中查找,或者在指定的文件夹中sh查找(如果你输入了somescript.sh~/bin/

sh ~/bin/somescirpt.sh. 

要使系统在路径中查找,somescript.sh请直接将其用作命令,而无需使用 sh 前缀。换句话说,在终端中输入:

somescript.sh

为了使其工作,somescript.sh需要位于路径中的文件夹中,在本例中~/bin/,它需要是可执行的,正如其他人指出的那样。为了完整性,我在下面包含了命令。

chmod +x ~/bin/somescript.sh

另请参阅如何运行.sh 文件?

如何在不输入完整路径的情况下运行脚本?

希望这可以帮助

答案2

正如 darent 和 user68186 所解释的那样,该脚本可能没有设置可执行位。如果设置了该位,您可以在脚本所在的目录中运行该脚本,只需在其前面加上./。 例如:

./myscript.sh

您不必在文件名末尾添加 .sh,但附加 .sh 以便让其他人知道这是一个 shell 脚本是一种很好的做法。

答案3

正如注释所说,您的脚本可能未标记为可执行。当您通过 sh 调用它时,您所做的就是告诉 shell 读取其内容并执行文本文件中的函数,这与直接调用可执行文件不同。试试这个:

chmod +x ~/bin/killwine.sh

然后,尝试从另一个目录再次执行它。另外,确保脚本的第一行包含以下内容,以便系统知道它必须由 shell 执行:

#!/bin/sh

相关内容