Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Помогите формить идею (а за одно как она вам? =)  (Прочитано 548 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ginger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Идея простая:

Когда в командной строке вводишь какую-нибудь команду, например git, а ее в системе нет, то шел пишет нам, что такой команды не найдено, но можно ввести sudo apt-get install git.
Я хочу предложить, чтобы шел задавал вопрос, о том, что может попробовать ее установить и [Y/n], чтобы жмакнуть интер и она пошла.

После успешного инстала, выполнить данную команду.


Вопрос состоит в том, как это правильно описать на английском, чтобы:
во-первых, проверить, есть такая идея или нет
во-вторых, если нет, то предложить ее.


Оффлайн ploop

  • Активист
  • *
  • Сообщений: 762
    • Просмотр профиля
Всё равно для установки нужны административные права, а пользователь может и не быть администратором (sudo не поможет).

Оффлайн Ginger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Всё равно для установки нужны административные права, а пользователь может и не быть администратором (sudo не поможет).
Весьма благодарен за ценное замечание!

А по поводу идеи, конечно она реализована! Реализована на уровне bash.
Гугл помог найти мануал, в котором описывается, как это можно перепрограммировать под себя bash.  8)

Если в кратце, то bash вызывает питоновский скрипт /usr/bin/command-not-found, в который передает значение для запуска, а уже внутри этого скрипта происходит вся логика.
Так что кто хочет поменять это поведения - прошу.

Оффлайн kostryukov

  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
спасибо=) пару раз тоже сталкивался с этим, и тож такая идея появлялась
у меня можно спросить=)

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Если вкратце, то bash вызывает питоновский скрипт /usr/bin/command-not-found, в который передает значение для запуска, а уже внутри этого скрипта происходит вся логика.

Автор предлагает сразу лезть со скальпелем в живую систему и править файлы, установленные из пакетов из репозитория.
Это неправильно.

Основы алгоритма работы этой функции также описаны неправильно. Правильно - по ссылке.
http://www.gnu.org/software/bash/manual/html_node/Command-Search-and-Execution.html#Command-Search-and-Execution пункт 3.

Функция command_not_found_handle в Ubuntu определяется в system-wide конфиге /etc/bash.bashrc.
Файл с питоньим скриптом лежит в /usr/lib, а не /usr/bin

Если очень надо, названную функцию можно определить в своем локальном ~/.profile или ~/.bash_profile, или ~/.bash_login, если последние имеются.
Перед редактированием файлов полезно почитать комментарии в начале.
В сети лежит пример, как, используя command_not_found_handle, обеспечить быстрый доступ по ssh к разным хостам.

Да, насчет идеи. В общем - никак.
Для многопользовательской системы это не нужно и даже может оказаться вредно, единоличный юзер вправе кромсать и корежить все по собственному вкусу.
Надо только помнить, что все изменения системных файлов (кроме конфигов в /etc) будут затерты при обновлении.
« Последнее редактирование: 29 Март 2010, 15:31:49 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Say Cheese

  • Любитель
  • *
  • Сообщений: 89
    • Просмотр профиля
Юзер будет везде жмакать йэс, а потом плакать на форуме из-за убежавшего траффика и тормозов перегруженной системы.
Оно нам надо?

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Единственное, что бы я изменил - этот скрипт до сих пор предлагает написать apt-get, в то время, как все прогрессивное человечество пользуется aptitude.
Пойду предложу на ланчпаде поменять несколько байтов в файле. :)

Пошел, хотел предложить.

Оказывается, уже сделано. Как и желаемая топик-стартером autoinstall feature (https://bugs.launchpad.net/ubuntu/+source/command-not-found/+bug/224776).
« Последнее редактирование: 29 Март 2010, 15:45:15 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Ginger

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
Ребята, огромное спасибо за советы и замечания.

Сейчас я передела, чтобы все лежало в домашней директории и command_not_found_handle переопределена в домашней .bashrc.

Оказывается, уже сделано. Как и желаемая топик-стартером autoinstall feature (https://bugs.launchpad.net/ubuntu/+source/command-not-found/+bug/224776).
Действительно сделано, но появится только в 10.4 ( у меня стоит бетта там еще этого нет).

И еще одно маленькое но:
В убунте будет так, что они всегда ждут ответ [y or n] от пользователя, а у меня сейчас на оборот автоматом ставит.
Минус этого решения, как говорил выше Say Cheese, что может быть безконтрольная установка пакетов,
а плюс в том, что если у меня есть скрипт, который вызывает не существующую функцию, то он останавливается, а в мое случае сможет продолжить свою работу.

Правда у меня осталось, до завершения две проблемы:
1. если команда вызывалась с параметрами, то он пишет, команд нот фаунд =(
2. хотелось бы иметь возможность определять, запущен ли скрипт в интерактивном режиме с пользователем, или выполняется автономно?

Но еще раз огромное спасибо.

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Действительно сделано, но появится только в 10.4 ( у меня стоит бетта там еще этого нет).
А при коммунизме все будет за!"№сь,
Он наступит скоро, надо только подождать,
Там все будет бесплатно, там все будет в кайф,
Там, наверное, вообще не надо будет умирать,
И все идет по плану!
(Е. Летов)

Правда у меня осталось, до завершения две проблемы:
1. если команда вызывалась с параметрами, то он пишет, команд нот фаунд =(
И ничего не ставит?
Значит, накосячено с поиском по базе.

2. хотелось бы иметь возможность определять, запущен ли скрипт в интерактивном режиме с пользователем, или выполняется автономно?

Плохо читали комментарии в .bashrc

$ head ~/.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return
« Последнее редактирование: 30 Март 2010, 13:51:38 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

 

Страница сгенерирована за 0.06 секунд. Запросов: 23.