2010-10-17

Самостоятельный command-not-found

В Ubuntu Maverick Meerkat центр приложений созрел до состояния профпригодности, но я по-прежнему предпочитаю управлять APT'ом в командной строке. Правда, сегодняшний разговор не о преимуществах aptitude, а о магии угадывания.
Если вы напечатали незнакомую для терминала команду, command-not-found предложит установить недостающий пакет. Выглядит это так:
~ $ midori
Программа 'midori' на данный момент не установлена.  Вы можете установить её, выполнив:
sudo apt-get install midori

Каждый раз копировать конструкцию sudo aptitude install packagename совсем не комильфо. Почему бы не упростить себе жизнь? Ребята на launchpad'е услышали молитвы пользователей и реализовали элегантное решение в версии c-n-f за номером 0.2.41. Заинтересованные могут установить пакеты для Lucid или Maverick / Natty. После обновления поведение c-n-f изменится:
~ $ midori
Программа 'midori' на данный момент не установлена. 
Would you like to install it now? [Y]

Одним раздражителем меньше ;-)

13 комментариев:

  1. Анонимный17.10.2010, 13:06

    Чудненько!

    ОтветитьУдалить
  2. Анонимный17.10.2010, 13:07

    приятно :)
    из zsh работает?

    ОтветитьУдалить
  3. @Leolik
    Такие приятные мелочи здорово помогают в повседневном использовании. Давно искал нечто подобное.

    @develop7
    В описании пакета сказано, что работает он через обработчик для функции command_not_found. Не знаю, есть ли она в zsh.

    ОтветитьУдалить
  4. @Dr.AKULAvich В zsh есть такой обработчик.

    Вот пример:
    function command_not_found_handler(){
    echo "Command $0 was not found.\n Seeing possible alternatives:"

    if [ -f /etc/fedora-release ] ; then
    yum search $0
    elif [ -f /etc/debian_version ] ; then
    apt-get search $0
    elif [ -f /etc/arch-release ] ; then
    yaourt -Ss $0
    fi
    }

    ОтветитьУдалить
  5. Обновил хэндлер, выложил на pastebin - http://uthark.pastebin.com/Tekq57z2

    ОтветитьУдалить
  6. @uthark
    Спасибо за подробности. Судя по функции, изначально механизм угадывания проще: запускается поиск пакета. В Ubuntu c-n-f поставляется с файлом scan.data, содержащим названия пакетов (ведь название команды может не совпадать с названием пакета). Поэтому ваш вариант не всегда правильно обработает аргумент $0.

    ОтветитьУдалить
  7. @Dr.AKULAvich Да, я знаю, что это не всегда работает. Но в большинстве случаев мне этого достаточно. :)

    ОтветитьУдалить
  8. Анонимный17.10.2010, 15:14

    Это может стать раздражителем для тех кто знает что делает.

    ОтветитьУдалить
  9. У меня установка - "aI mc"
    А aI это алиас, apt-get install, все просто :)

    ОтветитьУдалить
  10. Анонимный18.10.2010, 06:25

    Видимо в линуксе все стали пользоваться убунтой или дебианом, для тех кто не пользуется apt и sudo.

    ОтветитьУдалить
  11. >> Ребята на launchpad'е услышали молитвы пользователей

    Не те молитвы они слышат: радикально улучшить качество дистрибутива, устранить федороподобные глюки при обновлении (непрописывание ядра в GRUB, невозможность стартовать иксы), что-то сделать с тормозным гномом (почему в дебиане он быстрее!?)... [далее офтопик]

    По теме. Как хотишь, Акулович, а по-моему это спорное решение. Особенно когда ты не первый день в системе и всё, что надо, уже установлено. Народ требует огласить весь список зависимостей :-)

    ОтветитьУдалить
  12. @uthark
    Согласен. Меньше телодвижений, если знаешь, что набрал название правильно.

    @zahardzhan
    Не думаю, что новичку приходится долго терзать терминал. А остальным, почему бы нет? Хуже не стало, на мой взгляд.

    @satory
    ОК, просто, отлично. А перепечатать название пакета всё равно придётся :-)

    @Анонимный
    Прошу пардону, не понимаю, о чём речь.

    @virens
    Ну дык, куда Ubuntu до stable ветки Debian? Про гном некорректное сравнение: в Ubuntu много свистелок прикручено, которые в upstream'е гнома не были и вряд ли появятся.

    > Как хотишь, Акулович, а по-моему это спорное решение. Особенно когда ты не первый день в системе и всё, что надо, уже установлено.
    Это для неутомимых экспериментаторов, коим я отчасти являюсь. Запускаю какой-нибудь однострочник, а программы в обжитом окружении нетути. Подтвердил намерения — готово, пакет в системе. Такой примерно сценарий.

    Зависимости: python (< 2.7), python (>= 2.6), python-central (>= 0.6.11), python-apt, command-not-found-data, python-gdbm, lsb-release

    ОтветитьУдалить
  13. мерси попкорно, пригодится:)

    ОтветитьУдалить