我在终端中输入了以下内容
$ musique
The program 'musique' is currently not installed. You can install it by typing:
sudo apt-get install musique
因此,Ubuntu 知道“musique”是一个程序,尽管它目前尚未安装在机器上。但是,如果我输入
$ musiquez
No command 'musiquez' found, did you mean:
Command 'musique' from package 'musique' (universe)
它知道没有叫做“musiquez”的程序。
我的问题是,Ubuntu 如何知道这一点?有关哪些应用程序可以在 Ubuntu 上安装的信息存储在哪里?
答案1
此功能由找不到命令(其功能是在输入错误等情况下建议替代方案和更正)包。Ubuntu 默认安装它。
它是如何工作的?
它的工作方式是通过command_not_found_handle()
bash 中的函数。bash 提供了一个钩子,它基本上是一个在找不到命令时调用的函数。
如果你更好奇,请打开文件/usr/lib/command-not-found
并查看脚本。它使用 python 模块 CommandNotFound 工作。
答案2
正是由一对包command-not-found
和command-not-found-data
才使得该功能得以实现。
command-not-found
只是一个command_not_found_handle()
bash 函数的处理程序;它搜索有关 提供的命令和包之间的映射的数据command-not-found-data
。