为什么 shell 不能仅通过文件名称在当前目录中找到文件?

为什么 shell 不能仅通过文件名称在当前目录中找到文件?

我下载了适用于 Ubuntu 的 VS Code.deb文件。我将其重命名为vs.deb

然后我进入我的下载目录:

cd ~/Downloads

现在我在这里,我尝试安装它:

sudo apt install vs.deb

以下是我得到的结果:

Reading package lists... Done   
Building dependency tree          
Reading state information... Done   
E: Unable to locate package vs.deb   
E: Couldn't find any package by glob 'vs.deb'

但是当我使用 安装它时./vs.deb,它就会被安装:

sudo apt install ./vs.deb

为什么Linux不接受同一目录内的文件的名称而不需要相对路径?

答案1

您所经历的与 shell 无关,而是与命令如何apt解释命令行上的参数有关。

它主要用于从软件存储库安装软件包。默认情况下,参数表示apt软件源中软件包的名称。消息:

E: Unable to locate package vs.deb

清楚地表明vs.deb软件源中不存在该包。

尽管如此,它仍apt允许您直接安装下载的.deb软件包文件并解决其依赖关系。您必须给出明确的文件路径来表明您想要安装文件.deb./vs.deb已经表明文件路径:./表示当前目录,因此 apt 将vs.deb在当前目录中找到该文件。

实际上,shell 从来不会“找到”文件。shell 只是将参数传递给应用程序,而应用程序则负责解释这些参数。shell 最多会进行扩展(例如,*用所有文件名或~主文件夹的完整路径替换)或变量替换(例如,$HOME用该变量的内容替换)。

相关内容