Command-not-found
«bash: foo: команда не найдена» — часто видите подобное сообщение? А хочется, чтобы кроме этого было еще и написано, почему она не найдена? Скажем, не установлен нужный пакет, или просто опечатка. Вероятно, не так уж мало людей зависали после следующих действий:
$ rpmbuild
bash: rpmbuild: команда не найдена
$ sudo urpmi rpmbuild
Нет пакета с названием rpmbuild
Следующие пакеты содержат rpmbuild: java-rpmbuild, rpmbuildupdate
Чтобы выбрать все, используйте параметр «-a»
В том числе и для таких случаев был создан инструмент command-not-found для ROSA! Он является аналогом инструментов из других дистрибутивов, но для ROSA/Mandriva раньше его не было. Все что нужно для получения более дружественной консоли — установить пакет command-not-found и открыть новый терминал. Попробуйте написать что-то странное:
$ foo Команда foo не найдена. Возможно, имелось в виду: Команда 'fio' из пакета пакет 'fio' (contrib) Команда 'fop' из пакета пакет 'fop' (main, установлен) Команда 'for' из пакета пакет 'execline' (contrib) Команда 'zoo' из пакета пакет 'zoo' (restricted)
Замечательно! Я же как раз zoo хотел вызвать, ошибся. (Кстати, замечаем что пакет fop у нас уже установлен, но в этот раз не он нам нужен)
$ zoo Команда 'zoo' найдена в: пакет 'zoo' (restricted) Вы можете установить его, выполнив: urpmi zoo Хотите сделать это сейчас? (д/Н)
Все что остается — ввести «д» (или «y»). Не хотите получать предложения установить пакет? Установите переменную окружения COMMAND_NOT_FOUND_TURN_OFF_INSTALL_PROMPT=1, и больше Вам не будут задавать глупых вопросов.
Стоит заметить, что при вызове не через терминал (TTY) программа не будет выполнять никаких проверок и писать чего-то особого, она просто выведет «команда не найдена», как и просто bash. К тому же, что бы command-not-found ни написала, она всегда будет завершена с кодом 127, как это делает bash в таком случае.
Еще одна особенность command-not-found: анализ установленных пакетов и поиск запрашиваемой команды.
$ ifconfig Команда 'ifconfig' найдена в: пакет 'net-tools' (main, установлен) Файл /sbin/ifconfig существует! Проверьте переменную окружения PATH или вызывайте команду, используя абсолютный путь.
Так же в составе command-not-found поставляется утилита «cnf», которая позволяет делать все то же самое, что описано выше (на самом деле она и вызывается каждый раз, когда bash не может выполнить команду). Иными словами, «cnf foo» даст тот же вывод, как если написать «foo» в консоли. Есть еще один сценарий использования cnf: программа уже установлена, но нужно узнать, из какого пакета она пришла.
Вероятно, к этому моменту Вы уже установили command-not-found. Если да — заметили что вместе с ним установился некий пакет command-not-found-data. Этот пакет содержит базу данных (файл в формате JSON), из которой берется информация при работе cnf. Но так как репозитории постоянно изменяются, информацию из этой базы нужно периодически обновлять, поэтому раз в неделю данный пакет автоматически пересобирается с актульными данными и приходит к Вам вместе с остальными обновлениями.
Надеемся, ваше общение с консолью станет намного более приятным :)
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.