问题描述
我在终端中输入了以下内容
$ 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上安装哪些应用程序的信息存储在哪里?
最佳方法
该功能由command-not-found提供(它的功能是在出现误涂等情况下建议替代方案和纠正措施)包装。 Ubuntu默认安装它。
它是如何工作的?
它的工作方式是通过bash中的command_not_found_handle()
函数。 bash提供了一个钩子,它基本上是一个找不到命令时调用的函数。
如果您更好奇,请打开/usr/lib/command-not-found
文件并查看脚本。使用python模块CommandNotFound可以工作。
次佳方法
一对软件包command-not-found
和command-not-found-data
使此功能起作用。
command-not-found
只是command_not_found_handle()
bash函数的处理程序。它搜索有关command-not-found-data
提供的命令和程序包之间的映射的数据。