9

Я набрал следующее в терминале

$ 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?

2 ответа2

9

Эта функция предоставляется пакетом command-not-found(его функция - предлагать альтернативы и исправления в случае опечатки и т.д.). Ubuntu устанавливает его по умолчанию.

как это работает?

Это работает через функцию command_not_found_handle() в bash. bash предоставляет хук, который в основном является функцией, которая вызывается, когда команда не найдена.


Если вам интересно, откройте файл /usr/lib/command-not-found и посмотрите на скрипт. Работает с использованием модуля Python CommandNotFound.

4

Пара пакетов, command-not-found и command-not-found-data , - вот что заставляет эту функцию работать.

command-not-found - это просто обработчик для функции bash command_not_found_handle() ; он просматривает данные о сопоставлении команд и пакетов, предоставленных command-not-found-data .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .