为什么我们运行可执行文件时需要在前面添加./?

为什么我们运行可执行文件时需要在前面添加./?

假设我有一个somecommands.sh并且我用它chmod 777来使其可执行。为什么我必须键入./scommand.sh而不是仅仅键入somecommand.sh才能从其自己的目录运行它?

这有意义吗?如果可以省略,我该怎么办?

谢谢

答案1

您可能必须这样做,因为您当前的路径 ( pwd) 不在可执行文件的搜索路径中。

在控制台中输入:

echo $PATH | tr ':' '\n'

打印的每个文件夹都位于可执行文件的搜索路径中(按顺序)。

现在,如果您想从以下位置运行文件不同的目录,您必须提供完整(相对或绝对)路径。

./script.sh

表示当前目录(./,相对于您所在的位置)和文件名(script.sh)。您同样可以使用文件的完整路径(从根文件夹开始/)(例如/home/guo/script.sh,如果这是您的用户名,并且文件位于主目录中)。

作为提示,如果您经常使用该文件,我建议创建一个本地/bin目录(~/bin,如您的主目录中),然后放入export PATH="$HOME/bin:$PATH"您的.bashrc,例如。然后将您的脚本放入该目录中。

另一件事:我建议不要使用第777章作为运行它的权限。相反,我建议第755章,因此只有您有权覆盖该文件。如果您想让文件可执行,只需使用chmod +x script.sh,它通常会执行您想要的操作。

以与我上面描述的类似的方式,它可以将“当前”目录添加到 path: export PATH=".:$PATH",但不建议这样做。我强烈地~/bin建议对这些用例使用私有目录 ( )。

答案2

为了在 Linux 中运行任何可执行文件,您需要提及其完整路径(以防它未存储在变量中$PATH)。

在 Linux 中,.代表您当前所在的目录,/是路径分隔符。因此,使用./somecommands.sh,您可以告诉 shell,请运行somecommands.sh当前目录中存在的可执行文件。

相关内容