在运行编译代码时使用 ./

Kau*_*kar 5 linux

为什么我们在 linux 中运行编译代码之前使用./?如果我所在的目录高于已编译代码的目录,则似乎没有必要。让我举例说明。如果我的代码在/home/uname/code 中,并且我也在同一目录中,则必须使用./a.out。但是如果我在/home/uname/那么我可以使用./code/a.out。在这里我使用./但我认为更多的是浏览目录,而不是作为它必须运行代码的指示。那么,如果我与代码位于同一目录中,为什么我需要使用./来运行已编译的代码?

D_B*_*Bye 4

当您发出命令时,您的 shell 会使用一个技巧,使您看起来可以只调用该命令而不指定其完整路径。shell 在$PATH环境变量中列出的每个目录中查找该命令,如果找到,则安排运行该命令。

如果要运行不在 中的目录之一中的命令$PATH,则必须向 shell 提供在何处查找该文件的提示。在您的示例中,由于/home/uname/codeis not in $PATH,您需要为 shell 提供足够的路径信息,以便能够找到您想要执行的文件。无论您当前的工作目录恰好是文件所在的目录还是任何其他目录,都是如此。如果您碰巧与要执行的文件位于同一目录中,则./文件名之前的内容足以告诉 shell 在哪里可以找到该文件。

  • shell 在“$PATH”中查找您在命令行上传递的命令。如果当前工作目录不在 `$PATH` 中,那么 shell 永远不会在其中查找来解析命令名称。说服 shell 在不在 `$PATH` 中的目录中运行命令的唯一方法是为其提供足够的路径信息以便能够找到该文件。在当前目录中,即 `./` 提示符只是为了方便您而存在,shell 不会使用它来解析不合格的命令名称。 (2认同)