./
在路径前面加上(点斜线)有好处吗?
在大多数情况下,cd ./home
相当于cd home
(并且也cd ./././././home
)。是否存在这两条路径不会评估为同一路径的情况?./
在文件夹或文件路径的开头有或没有有什么好处或缺点吗?
如果从程序或脚本内部,我想打开一个配置文件,我正在硬编码要打开的文件,应该是:
resource/config.txt
或者
./resource/config.txt
POSIX(或常见的 Unix 实现)在打开这两个路径之间是否给出了任何语义差异?
答案1
至少有两个原因需要这样做./something
。
您有一个想要运行的程序。它被命名为“test”或“cat”或“ps”等不方便的名称。通常,shell 在环境变量的目录中查找程序名称
PATH
。要执行您的test
,您必须输入./test
,否则/usr/bin/test
将执行某些类似的操作。这可能会非常令人困惑。.
您的环境变量中没有该PATH
变量,因为您不想在浏览文件系统时意外执行程序。真正糟糕的人可能会ls
在某个目录中留下脚本。该文件ls
可能包含rm -rf $HOME
.如果你PATH
有“.”在正确的位置,可怕的人可能会诱骗您删除主目录中的所有内容。你当然可以输入“。”作为 中的最后一个条目PATH
,但可以设计出“.”的情况。导致PATH
问题。因此,要运行可执行文件驻留在当前工作目录中的程序,必须在其文件名前加上“./”前缀。
答案2
./
确实始终是当前工作目录。然而,它(有充分的理由)通常不添加到PATH
.这意味着,如果当前工作目录中有想要运行的脚本或二进制文件,则需要使用它./script.sh
而不是script.sh
让它运行。
答案3
vagrant@host:~$ pwd
/home/vagrant
vagrant@host:~$ mkdir foobar
vagrant@host:~$ mkdir foobar/~
vagrant@host:~$ cd foobar
vagrant@host:~/foobar$ cd ./~
vagrant@host:~/foobar/~$ pwd
/home/vagrant/foobar/~
vagrant@host:~/foobar/~$ cd ~
vagrant@host:~$ pwd
/home/vagrant
vagrant@host:~$ cd foobar
vagrant@host:~/foobar$ cd ~
vagrant@host:~$ pwd
/home/vagrant
vagrant@host:~$
正如 @DopeGhoti @Wildcard 和其他人所指出的,有时非常具体地说明您所在的目录以及您的目标是什么,这很方便。和./
结构../
提供了这一点。