如何在不 cd 或修改 PATH 的情况下从不同目录运行可执行文件?

如何在不 cd 或修改 PATH 的情况下从不同目录运行可执行文件?

存在与我想问的类似的变体,但我找不到确切的问题,所以我会在这里问。

假设我有一个编译.c文件,其可执行文件ex位于/mnt/f/C_F/ex。我可以从内部执行它,/mnt/f/C_F./ex如果我想从/mnt/f(或任何目录)执行它,该怎么办?我不想/mnt/f/C_F/为此添加到 PATH。

我找不到解决方案,我想这是不可能的。请确认这一点。

答案1

使用该文件的绝对路径。

/mnt/f/C_F/ex

无论您当前的工作目录如何,这都应该始终有效。通常,出于这个原因,您可能应该更喜欢在脚本中使用绝对路径(尽管存在重要的例外情况)。

答案2

您始终可以使用可执行文件的相对路径或完整路径

当你处于 时/mnt/f,你可以运行:

C_F/ex
# or
/mnt/f/C_F/ex

答案3

任何小路1.至多包含一个/工程的可执行文件。命令名称中出现/字符会告诉 shell,您正在要求它运行特定文件,并且您正在指定该文件所在的特定位置。这是 shell 期望的语法的一部分;在大多数其他情况下,(相对)路径不包含任何字符也是可以接受的/

对于不在当前目录中的可执行文件,这就是通往它的任何道路。如果不使用至少一个 ,就无法写入另一个目录中文件的路径/。这使得运行其他目录中的文件成为更简单的情况,尽管它不太常见。

  • 绝对路径- 喜欢/mnt/f/C_F/ex- 从...开始/

  • 相对路径到另一个目录中的文件——C_F/ex当您在/mnt/f目录中时 - 始终包含/,即使它不在开头。没有 的相对路径/只是一个文件名,用于标识当前目录中的文件。(但反之则不然。相对路径可能包含 ,/但仍引用当前目录中的文件;见下文。)

    请注意,如果要使相对路径正常工作,它仍然必须实际引用您想要的文件,并且无论相对路径是否引用您想要的文件取决于你当前所在的目录,因为它们是相对于当前目录解析的。

对于可执行文件在当前目录中,最短相对路径通常不起作用,因为它不包含/。因此,这是更复杂的情况,尽管它更常见​​。当您在可执行文件所在的目录中时ex,您不能直接运行ex,即使ex是该可执行文件的完美相对路径。

它不起作用的原因是,不包含的命令名称/不被视为相对路径或任何路径。相反,它被视为文件名并被搜索在列出的目录$PATH。2

这就是为什么./ex当您与 位于同一目录中时使用 的原因ex每个目录都包含一个.指向目录本身的条目。这提供了一种方法编写一个相对路径,该路径标识与相同的文件,ex但其中包含/,因此可用作 shell 视为路径的命令名。

因此,前缀./不是一种特殊的语法,而只是在当前目录中写入文件的相对路径的第二简单的方法,也是包含 . 的方法中最简单的方法/


1在本回答中,我使用“path”来表示“pathname”。这是“path”最常见的用法,但不是唯一用法。我在这里使用的“path”一词不应与可执行文件搜索路径,它是列出其路径的目录集合,以:字符分隔,$PATH环境变量中

2不包含的命令名/也可能被解析为非外部命令,例如 shell 内置命令和 shell 函数。

相关内容