![尝试运行缺少的命令后对软件包的建议:它是如何工作的?](https://linux22.com/image/161062/%E5%B0%9D%E8%AF%95%E8%BF%90%E8%A1%8C%E7%BC%BA%E5%B0%91%E7%9A%84%E5%91%BD%E4%BB%A4%E5%90%8E%E5%AF%B9%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%E5%BB%BA%E8%AE%AE%EF%BC%9A%E5%AE%83%E6%98%AF%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%E7%9A%84%EF%BC%9F.png)
在某些 Linux 发行版上(...通常是对初学者更友好的发行版,例如 Ubuntu),如果您尝试运行属于某个软件包的命令,没有实际安装在系统上,您会收到一条有用的消息,大致如下
"unknown command; it is found though in [package] or [other-package]."
(...我不记得确切的措辞;我现在确实无法访问拥有它的系统)。我猜这是某种 Bash + APT 魔法(至少对于 Ubuntu 来说)。
我的问题是...哪个软件可以实现此目的以及我在哪里可以查找更多文档以使其在默认情况下不附带它的系统上实现? (...或者,至少,在哪里可以找到它的“二进制名称到包名称”数据库?)
答案1
是的,它是 shell + APT“魔法”的组合(参见规格在这里)。
Bash 支持命令未找到处理程序:如果它找不到命令,并且有一个名为 的 shell 函数command_not_found_handle
,它会调用该命令。通常,一个名为command-not-found
(在 Debian 衍生版本中)或PackageKit-command-not-found
(在 Fedora 和相关发行版中;它在 Debian 中也可用)提供了此处理程序的实现。
数据库各不相同。 Debian 中默认搭载apt-file
数据库;看自述文件.Debian了解详情。 PackageKit 实现向 PackageKit 询问相关信息。