filename
和有什么区别./filename
?在什么情况下一个比另一个更受青睐?
答案1
对于数据文件,这没有什么区别 - 两个语句都将引用当前目录中的数据文件。 (例如,cat filename
和cat ./filename
在语义上是相同的。)
如果文件名指的是可执行文件,即是您在命令行中输入的第一个(甚至是唯一)内容。./filename
将在您当前目录中查找可执行文件,而不在其他任何地方。filename
另一方面,将评估环境变量PATH
,并在存储在其中的每个目录中查找filename
(可能包括或不包括您当前的目录)。
./filename
(或任何其他/path/to/filename
)是首选,当你想执行具体的可执行文件,而不是在 PATH 中找到的第一个文件。
答案2
如果您正在运行一个程序,filename
则表示运行在您的目录中找到的第一个程序$PATH
,第二个程序表示运行当前目录中的程序。
如果您使用该文件名作为程序的参数,do_something filename
则do_something ./filename
它们的含义相同。
答案3
您指的是命令执行,对吗?
有一个环境变量PATH
包含一些系统目录,以分号分隔。当您输入时,command
系统会按照指定的顺序在这些目录中查找名为 <command> 的可执行文件。如果找到,它会尝试执行它。您可以通过 bash 查看您的 PATH echo $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
答案4
这取决于您在什么情况下使用它。
作为一个参数,例如“程序文件名”,那么它取决于程序,但通常它们是相同的。
作为程序名称,例如“filename 参数”,则“filename 参数”将搜索 PATH 以查找二进制文件,而“./filename 参数”将使用当前目录中的程序。如果 . 不在 PATH 中,这显然很有用,但即使 . 在路径中,使用这个也很有用,可能是因为它与较早的条目匹配。