Как реализовать предложение по установке пакетов в Debian?

21

Я заметил, что во время работы в Ubuntu, если я наберу следующее:

mc

и он не установлен, я получаю сообщение ниже:

The program 'mc' is currently not installed. You can install it by typing: sudo apt-get install mc

Однако в Debian это недоступно. Он просто выдает сообщение «-bash: / usr / bin / mc: Нет такого файла или каталога». Как я могу реализовать ту же функциональность в командной строке bash в Debian? Да, я знаю, что если мне нужно предложение пакета, я могу просто выполнить поиск по регулярному выражению, используя поиск в apt-cache . Однако я надеялся на более простое предложение сразу после ввода названия программы.

Согласно обсуждениям, функциональность обеспечивается командой package -not-found . Однако даже после его установки, а также установки пакета завершения bash, он недоступен в оболочке Debian bash.

Джоэл Г Мэтью
источник

Ответы:

22

Причина, по которой при установке command-not-foundне начали появляться предложения для неустановленных пакетов, заключалась в том, что я пропустил небольшое уведомление от dpkg в процессе установки.

Предполагается, что команда запускается update-command-not-foundсразу после запуска apt-get install command-not-found. На самом деле dpkg предлагает запустить эту команду.

Джоэл Г Мэтью
источник
1
Мне также пришлось запустить apt-get updateперед запуском, а update-command-not-foundзатем либо открыть новый сеанс Bash или source /etc/bash.bash.rc.
Jordanbtucker
Я сделал apt updateдо apt install command-not-foundэтого update-command-not-found, а затем запустил новую оболочку, но обнаружил, что мне нужен другой, apt updateи, возможно, update-command-not-foundпрежде чем он начал работать.
Дэйв Икс
9

Пакет Debian кажется неполным. README говорит, что вы должны найти /etc/bash_command_not_foundв своем .bashrc. Странно, что этот файл не входит в пакет.

Debian command-not-foundпакет основан на пакете Ubuntu . Пакет ubuntu кажется более полным в этом отношении.

Содержимое версии bash_command_not_found для Ubuntu :

command_not_found_handle() {
  if  [ -x /usr/lib/command-not-found ]; then
     /usr/lib/command-not-found -- "$1" 
     return $?
  else
     return 127
  fi        
}

Добавьте эти строки в ваш ~/.bashrc(или /etc/bash.bashrc), и command-not-foundфункция должна работать.

lesmana
источник
1
README неверно, Debian не использует этот файл. Этот обработчик включен в /etc/bash.bashrc (по крайней мере, в Debian 9), который автоматически запускается интерактивными оболочками Bash при запуске.
hackerb9
Установка command-not-foundпакета (версия 0.2.38-4 с сайта debian.org) в MX Linux (основа Debian 9 Stretch) не изменила /etc/bash.bashrc и впоследствии не работала до добавления строк в этом ответе.
Xen2050