Linux 中 filename 和 ./filename 有什么区别

Linux 中 filename 和 ./filename 有什么区别

filename和有什么区别./filename?在什么情况下一个比另一个更受青睐?

答案1

对于数据文件,这没有什么区别 - 两个语句都将引用当前目录中的数据文件。 (例如,cat filenamecat ./filename在语义上是相同的。)

如果文件名指的是可执行文件,即是您在命令行中输入的第一个(甚至是唯一)内容。./filename将在您当前目录中查找可执行文件,而不在其他任何地方。filename另一方面,将评估环境变量PATH,并在存储在其中的每个目录中查找filename(可能包括或不包括您当前的目录)。

./filename(或任何其他/path/to/filename)是首选,当你想执行具体的可执行文件,而不是在 PATH 中找到的第一个文件。

答案2

如果您正在运行一个程序,filename则表示运行在您的目录中找到的第一个程序$PATH,第二个程序表示运行当前目录中的程序。

如果您使用该文件名作为程序的参数,do_something filenamedo_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 中,这显然很有用,但即使 . 在路径中,使用这个也很有用,可能是因为它与较早的条目匹配。

相关内容