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

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

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

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

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

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

答案1

当您运行命令时

$ ./hello2

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

命令

$ ././hello2

还会导致 shell 执行该文件。

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

每个目录都有一个.目录条目。该条目对应于目录本身。所以说与说等./相同。././././././

唯一的区别是系统可能必须执行一些额外的目录查找(除非 shell 很智能并发现明显的简化)。


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

这意味着如果调用当前目录alamin,则以下内容也将执行该文件:

$ ../alamin/hello2

一样

$ ../alamin/./hello2

$ .././alamin/./hello2

根目录/是一个特例。它的目录项与其目录项..相同。.这意味着您不能使用 来“超越”它/..

也可以看看:文件夹的链接数量并不能反映真实的状态?

答案2

当输入命令名称时,例如hello,系统会在您的 中查找文件PATH,该文件应该看起来像这样:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

如果系统在这些目录中找不到该命令,您将收到command not found错误消息。

通过添加./到命令前面,您可以将搜索限制为当前目录。

每个目录都有一个.对应于目录本身的条目,因此您通过键入所做的所有操作././hello仍然限制在目录本身中查找命令(两次)。

尝试cd ./././././

答案3

答案是正确的,但我想告诉你另一件事。运行以下命令,

┌─[luvpreet@DHARI-Inspiron-3542] - [~/Desktop/drf-vogo] - [2017-09-01 08:57:42]
└─[0] ls -la
total 60
drwxrwxr-x 14 luvpreet luvpreet 4096 Aug 14 15:30 .
drwxr-xr-x 21 luvpreet luvpreet 4096 Sep  1 00:27 ..

您会注意到,前两行有...

现在,这.是指向您当前所在目录的指针。并且..是指向其父目录的指针。

当你这样做时cd ..

monitoring-server@monitoring-server:~/kibana-project$ cd ..
monitoring-server@monitoring-server:~$ 

它移动到父目录。

当你这样做时cd .

monitoring-server@monitoring-server:~/kibana-project$ cd .
monitoring-server@monitoring-server:~/kibana-project$ 

它保留在同一目录中。

现在,../testfile.txt, 指向testfile.txt父目录中的文件。并./testfile.txt指向当前目录中的测试文件。

因此,././././././././尽可能将其保留在同一目录中。

并将../../../../继续上一级到父目录。

相关内容