Команда «бла» не найдена, вы имели в виду:?

7

Итак, когда команда не найдена, каким образом заполняется список «Вы имели в виду:»? Какая программа находит эти альтернативные команды? Что означает: «(главное), (вселенная) ...»? Могу ли я изменить, какая программа находит это?


источник
1
Вы спрашиваете, какие программы предлагают эту функциональность или что она делает в вашем случае? Если последнее, вы предоставили слишком мало информации. Какую оболочку вы используете для начала?
techraf
Я использую Bash, но я действительно имею в виду в самом общем случае. Какие программы предоставляют это и есть ли достаточно последовательный способ определения программы в большинстве оболочек?
Это также в значительной степени зависит от того, какую версию Unix / Linux вы используете, чтобы понять, как реализована эта функция.
Рэндалл

Ответы:

2

Если вы посмотрите на его содержимое /etc/apt/sources.listбудет иметь формат

#Archive type  Repository URL                   Distribution Component
 deb           http://archive.ubuntu.com/ubuntu precise      main

Тип архива

Первое слово в каждой строке, deb или deb-src, указывает тип архива. Deb указывает, что архив содержит двоичные пакеты (deb) и т. Д.

URL репозитория

Следующая запись в строке - это URL-адрес хранилища, из которого вы хотите загрузить пакеты.

распределение

«Дистрибутивом» может быть либо кодовое имя релиза / псевдоним (wheezy, jessie, stretch, sid), либо класс релиза (oldstable, stable, testing, unstable) соответственно.

Что означает: «(главное), (вселенная) ...»?

Составная часть

main состоит из пакетов, совместимых с DFSG, пакеты contrib содержат программное обеспечение, совместимое с DFSG, но имеют зависимости, не относящиеся к main, несвободные содержат программное обеспечение, которое не соответствует DFSG и т. д. Совет: проверьте один из URL-адресов хранилища, в нем должна быть папка с именем компонента.

Менеджеры пакетов говорят, aptчто у них будет база данных, которая содержит список всех пакетов в репозиториях, и она достаточно умна, чтобы давать вам предложения.

Ваш менеджер пакетов может быть на eof dpkg (например, Debian, Ubuntu и т. Д.), Apt (например, Debian, Ubuntu и т. Д.), Теперь устарел rpm (например, старые версии Redhat и более новые не запускают его по причинам совместимости), yum (например, . Fedora, CentOS), dnf - дентрифицированная ням (например, новые выпуски Fedora) и так далее. Для более полного списка проверьте это . Вы можете даже увидеть несколько менеджеров пакетов в одном дистрибутиве. Например, в Ubuntu вы можете увидеть dpkg, который кормит / etc / apt / sources / list.

Поэтому, когда вы печатаете

cleaq

Это может сказать

cleaq: no command found. Did you mean clean.

каким образом заполняется список «Вы имели в виду:»?

Это включает в себя сопоставление с образцами пакетов в вашей базе данных менеджера пакетов.

Эта база данных обновляется, когда вы делаете apt-get update

Не уверен насчет

Могу ли я изменить, какая программа находит это?

хоть. Я считаю, что это особенность, которую нельзя изменить. Хотя не уверен

Ссылка : исходный список Debian

sjsam
источник
1
@vondirac: Да, sources.list находится внутри /etc/apt. См. Редактирование. Ну, в общем, вы можете сказать, что ваш менеджер пакетов поддерживает этот список для вас, и вы можете использовать apt менеджера пакетов (в случае Debian, Ubuntu и т. Д.), Rpm (Redhat и его клоны), yum (например, Fedora , CentOS) и dnf (новые выпуски Fedora)
sjsam
Вы можете улучшить этот ответ со ссылкой на некоторые документы по Ubuntu .
JdeBP
4

Ведь bashего поведение определяется функцией оболочки command_not_found_handle(см. man bash).

Чтобы увидеть, какое поведение определяется этой функцией, вы можете выполнить:

declare -p -f command_not_found_handle

Вы можете изменить используемую программу, переопределив command_not_found_handleфункцию.

В дистрибутивах на основе Debian (включая Ubuntu) пакетcommand-not-found обычно устанавливается и доступен как /usr/lib/command-not-found по ссылке:

Предложить установку пакетов в интерактивных сессиях bash

Этот пакет установит обработчик для command_not_found, который ищет программы, которые в данный момент не установлены, но доступны из репозиториев.

Смотрите также:

Randall
источник
0

Это не стандартная особенность оболочек Linux. Есть как минимум две возможности:

  • zsh поддерживает свой собственный список предложений
  • проект thefuckпредлагает еще один
techraf
источник