Answers:
对于数据文件,这没有什么区别-这两个语句都将引用当前目录中的数据文件。(例如,cat filename
和cat ./filename
在语义上是相同的。)
如果所涉及的文件名指向可执行文件,那就是另一回事了,即文件名是您在命令行上键入的第一(甚至是唯一)东西。./filename
会在当前目录中寻找可执行文件,而在其他任何地方都不会。filename
另一方面,将评估环境变量PATH
,并filename
在其中存储的每个目录中查找(可能包括或可能不包括当前目录)。
./filename
/path/to/filename
因此,当您要执行特定的可执行文件而不是在PATH中找到的第一个可执行文件时,首选使用(或其他)。
如果您正在运行程序,则filename
说运行您所找到的第一个程序,$PATH
第二个说要运行当前目录中的一个程序。
如果您正在使用的文件名作为参数传递给一个程序作为do_something filename
或do_something ./filename
然后他们意味着同样的事情。
您指的是命令执行,对不对?
有一个环境变量PATH
,其中包含一些系统目录,以分号分隔。键入时command
,系统将按照指定的顺序在这些目录中查找,以找到名为<command>的可执行文件。如果找到,它将尝试执行该文件。您可以通过echo $PATH
bash 查看PATH 。例如:
$ echo $ PATH
/ sbin:/ bin:/ usr / sbin:/ usr / bin:/ usr / games:/ usr / local / sbin:/ usr / local / bin:/ home / ivanatora / bin:/ usr / local / kde4 / bin:/ usr / local / kde4 / bin
键入时,./filename
您要指定确切路径:当前目录。您可以看到当前目录很少位于$ PATH中(出于安全原因)。因此,如果要从当前目录执行文件,请使用./filename
。
要通过文件路径(特别是如果不在$ PATH中)执行文件,您还可以输入<path>/file
,例如:
/ sbin / ifconfig
可执行安全性是造成这种差异的主要原因。
你不想要 。(当前的工作目录或PWD)在您的路径中,因为有人可能会 在PWD中将ps或ls之类的重要可执行文件trojan http://en.wikipedia.org/wiki/Trojan_horse_%28computing%29并通过显示错误数据来欺骗您。