存在类似于我想问的变化,但我找不到确切的问题,所以我会在这里问。
假设我有一个编译.c
文件,导致可执行文件ex
位于/mnt/f/C_F/ex
. 我可以很好地从内部执行它/mnt/f/C_F
,./ex
但是如果我想从/mnt/f
说(或任何目录)中执行它怎么办。我不想为此添加/mnt/f/C_F/
到 PATH 中。
我找不到解决方案,我想不可能这样做。请确认。
存在类似于我想问的变化,但我找不到确切的问题,所以我会在这里问。
假设我有一个编译.c
文件,导致可执行文件ex
位于/mnt/f/C_F/ex
. 我可以很好地从内部执行它/mnt/f/C_F
,./ex
但是如果我想从/mnt/f
说(或任何目录)中执行它怎么办。我不想为此添加/mnt/f/C_F/
到 PATH 中。
我找不到解决方案,我想不可能这样做。请确认。
您始终可以使用可执行文件的相对或完整路径
当你在时
/mnt/f
,你可以运行:使用该文件的绝对路径。
/mnt/f/C_F/ex
无论您当前的工作目录如何,这都应该始终有效。通常,出于这个原因,您可能应该更喜欢脚本中的绝对路径(尽管有重要的例外)。
包含至少一个作品的可执行文件的任何路径1 。
/
命令名中出现的/
字符告诉 shell 您要求它运行特定文件,并且您正在指定要找到该文件的特定位置。这是 shell 所期望的语法的一部分;在大多数其他情况下,(相对)路径不包含/
字符是可以接受的。对于不在当前目录中的可执行文件,那是它的任何路径。如果不使用至少一个
/
. 这使得在其他目录中运行文件变得更简单,即使它不太熟悉。绝对路径-- 像 --start
/mnt/f/C_F/ex
with/
。另一个目录中文件的相对路径
C_F/ex
(当您在该/mnt/f
目录中时)始终包含 a/
,即使它不在开头。没有 a 的相对路径/
只是一个文件名,用于标识当前目录中的文件。(反之则不然。相对路径可能包含 a/
但仍引用当前目录中的文件;见下文。)请注意,如果要工作,相对路径仍然必须实际引用您想要的文件,并且相对路径是否引用您想要的文件取决于您当前所在的目录,因为相对于当前目录进行解析.
对于当前目录中的可执行文件,最短的相对路径通常不起作用,因为它不包含
/
. 因此,这是更复杂的情况,尽管它更熟悉。当您在可执行文件所在的目录中时ex
,您不能只运行 runex
,即使它ex
是该可执行文件的完美相对路径。它不起作用的原因是不包含 a 的命令名称
/
不被视为相对路径或任何路径。相反,它被视为文件名并在$PATH
. 2这就是为什么
./ex
当您与ex
. 每个目录都包含一个.
引用目录本身的条目。这提供了一种编写相对路径的方法,该相对路径标识相同的文件,ex
但其中包含一个文件,/
因此可用作 shell 将其视为路径的命令名。因此,前缀不是一种
./
特殊的语法,而只是将相对路径写入当前目录中文件的第二简单方法,也是包含/
.1在这个答案中,我使用“路径”来表示“路径名”。这是“路径”最常见的用法,但不是唯一的用法。我在这里使用的术语“路径”不应与可执行搜索路径混淆,可执行搜索路径是目录的集合,其路径在环境变量
:
中以字符分隔。$PATH
2不包含 a 的命令名称
/
也可以解析为非外部命令,例如 shell 内置命令和 shell 函数。