Попросите установить программу после того, как «Программа« x »в настоящее время не установлена»


18

Если вы попытаетесь запустить программу, которая не установлена, вы получите сообщение

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

и вместо того, чтобы предлагать вам установить программу для вас, вы должны ввести фактическую команду. Как это поведение можно изменить?

Ответы:


17

Пакет, отвечающий за это поведение, является пакетом command-not-foundУстановить команду не найден , и он уже включает в себя желаемое поведение, хотя по умолчанию оно отключено. Вы можете включить его, добавив следующую строку в ваш~/.bashrc

export COMMAND_NOT_FOUND_INSTALL_PROMPT=1

Теперь поведение изменено на

The program 'x' is currently not installed. You can install it by typing:
sudo apt-get install x
Do you want to install it? (N/y)

Примечание: если вы получаете сообщение о сбое Python (в частности AttributeError: 'str' object has no attribute 'decode'), это ошибка 1073919 . Исправление уже доступно для Raring и Saucy. В качестве альтернативы ( только для опытных пользователей ) вы можете изменить файл /usr/lib/python3/dist-packages/CommandNotFound/CommandNotFound.py, см. Различия в прикрепленных к отчету об ошибках строках, которые необходимо изменить.

Редактировать: Исправление теперь выпущено в версии 0.3ubuntu7.1 в Raring (SRU) и для 0.3ubuntu8 в Saucy.


1

Мое решение - это гибрид безопасности и комфорта:

auto-apt проверяет доступ к файлам программ, работающих в ее средах, и если программа пытается получить доступ к файлу, о котором известно, что он принадлежит к неустановленному пакету, auto-apt установит этот пакет с помощью apt-get. Эта функция требует apt и sudo для работы. Он также предоставляет простую базу данных для поиска, в каком пакете содержится запрошенный файл.

Это эмулятор терминала, в котором вы входите в среду, в которой каждый доступ к файлу проверяется предварительно вручную с помощью автоматической проверки, и если он не существует, он выполняет поиск в базе данных (а-ля apt-file), загружает и устанавливает нужный пакет, а затем позволяет программе продолжить , Вы должны выполнить его как root:

sudo auto-apt

Это полезно в тех случаях, когда вы собираете пакет и не хотите находиться перед экраном, просматривая каждую ошибку конфигурации для отсутствующих заголовков и т. Д.

Это также может быть использовано в качестве замены apt-get + apt-file, где вы можете устанавливать программы, просто сообщая, commandчтобы они выполнялись.

Вы должны понимать, что вы не должны оставлять его открытым, когда ваша система не просматривается, поскольку это почти так же, как если бы вы использовали пользователя root.

Справочная страница: http://derpi.tuwien.ac.at/cgi-bin/man/man2html?1+auto-apt


0

Авто установка была бы плохой идеей. Если вы хотите сохранить набор текста, вы можете использовать

sudo apt-get install !!

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

Хотя есть некоторые предостережения, о которых упоминали @ eliah-kagan и @gertvdijk в комментариях. Некоторые программы не имеют того же имени пакета, что и исполняемый файл. Кроме того, при передаче аргументов в двоичный файл это может привести к неожиданным результатам.


Конечно, я знаю, что мое предложение не является хорошим решением, но оно может работать «достаточно хорошо» в зависимости от потребностей пользователей.
L3DX

5
Имена команд (имя двоичного файла в системе) не обязательно совпадают с именем пакета.
gertvdijk

3
l3dx: Хотя у меня все еще есть опасения (включая точку зрения @ gertvdijk о том, что имена пакетов и команд часто различаются, а также опасения по поводу возможного очень плохого влияния дополнительных аргументов командной строки, передаваемых исходной команде), похоже, вы на что-то , После небольшого тестирования кажется, что это работает лучше на практике, чем (я думаю) это работает в теории. Я все еще рекомендую расширить этот ответ для уточнения, предупреждения и, возможно, для подробного описания других вариантов. В любом случае, я понизил это, но удалил свое понижение.
Элия ​​Каган

0

Существует несколько способов быстрой установки предложенного пакета:

  • Добавить export COMMAND_NOT_FOUND_INSTALL_PROMPT=1куда-то вроде~/.bashrc

    это самый "крутой" способ, хотя, очевидно, не совсем безопасный, но, вероятно, 90% времени будет вызывать внутреннее "Спасибо, это именно то, что я хотел, чтобы вы сделали!" ответ.

    (Один из личных недостатков этого метода заключается в том, что мне кажется трудным запомнить / найти ответ, поэтому я, как правило, не использовал его до сих пор.)

  • Если вы используете терминал по умолчанию, вы можете быстро выбрать строку и щелкнуть средней кнопкой мыши, чтобы вставить ее непосредственно в командную строку. (Другие терминалы или приложения SSH могут иметь другие методы.)

    На практике я нахожу это достаточно быстрым, и немного труднее сделать это «случайно», и не требуя предварительной настройки, вместо этого я склонен делать это.

  • Однако есть что сказать - если вы можете (или хотите научиться) быстро печатать - для того, чтобы печатать sudo apt install packagenameнапрямую.

    Это помогает вам тренировать мышечную память, а также означает, что вам нужно прочитать и набрать название пакета, то есть вы, скорее всего, запомните его в будущем. Это также немного проще в более поздних версиях Ubuntu, потому что aptработает вместо apt-get.


1
Вы, вероятно, имели в виду, ~/.bashrcа не ~/.bash_rc.
Edwinksl

Спасибо, я, наверное, думал .bash_profile.
mwfearnley
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.