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 $PATHbash 查看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并通过显示错误数据来欺骗您。