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 комментариев: ответить

17.10.2010, 13:06   Leolik комментирует...

Чудненько!

17.10.2010, 13:07   develop7 комментирует...

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

17.10.2010, 13:17   Dr.AKULAvich комментирует...

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

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

17.10.2010, 13:21   uthark комментирует...

@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
}

17.10.2010, 14:00   uthark комментирует...

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

17.10.2010, 14:34   Dr.AKULAvich комментирует...

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

17.10.2010, 14:38   uthark комментирует...

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

17.10.2010, 15:14   zahardzhan комментирует...

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

18.10.2010, 5:49   satory комментирует...

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

18.10.2010, 6:25   Анонимный комментирует...

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

18.10.2010, 13:36   virens комментирует...

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

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

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

18.10.2010, 21:52   Dr.AKULAvich комментирует...

@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

21.10.2010, 23:58   Ich комментирует...

мерси попкорно, пригодится:)

Отправить комментарий