shell 如何解释 ././command-name?

ala*_*min 3 shell directory slash filenames

hello2在当前工作目录中有一个名为的二进制文件。

要执行它,我需要按下./hello2它并显示输出。

但是当我使用以下命令时././hello2它仍然有效。

你能解释一下shell是如何解释这个命令的吗?

Kus*_*nda 8

当你运行命令时

$ ./hello2
Run Code Online (Sandbox Code Playgroud)

shellhello2在目录中查找文件.,即在当前目录中。然后它根据一些规则运行脚本或二进制文件(在这种情况下是无趣的)。

命令

$ ././hello2
Run Code Online (Sandbox Code Playgroud)

还会导致外壳程序执行该文件。

这是因为../.是同一个目录。

每个目录都有一个.目录条目。此条目对应于目录本身。说着./相同的话././././././等。

唯一的区别是系统可能需要做一些额外的目录查找(除非 shell 很聪明并且发现了明显的简化)。


每个目录还有一个..指向其父目录的条目。

这意味着如果当前目录被调用alamin,那么下面的代码也将执行该文件:

$ ../alamin/hello2
Run Code Online (Sandbox Code Playgroud)

一样

$ ../alamin/./hello2
Run Code Online (Sandbox Code Playgroud)

$ .././alamin/./hello2
Run Code Online (Sandbox Code Playgroud)

根目录/是一个特例。它的..目录条目与其.目录条目相同。这意味着您不能使用/...

另请参阅:文件夹的链接数不反映真实状态?

  • @zck ...除非`~/Documents/` 是一个链接。 (3认同)