Коли ви вводите команду, якої не існує у вашій системі, функція bash run command_not_found_handle()
. У цій функції є виклик /usr/lib/command-not-found
сценарію, який друкує повідомлення.
Ubuntu 12.04
Моя перша здогадка змінити джерело цього сценарію, щоб stdout
замість нього надрукувати повідомлення stderr
, але коли я читав джерело сценарію, я виявив, що ви можете налаштувати його, щоб просто запитати, чи хочете ви встановити відсутні пакет.
Якщо ви експортуєте змінну, COMMAND_NOT_FOUND_INSTALL_PROMPT
вам буде запропоновано встановити відсутні пакет:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ export COMMAND_NOT_FOUND_INSTALL_PROMPT=""
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
Do you want to install it? (N/y)y
sudo apt-get install git
[sudo] password for pbm:
Старіші версії Ubuntu
На жаль, немає, COMMAND_NOT_FOUND_INSTALL_PROMPT
тому я можу знайти кілька інших варіантів:
1) Встановіть пакет з 12.04 - це не повинно бути проблемою - це лише кілька скриптів у Python, тому він повинен працювати (неперевірений!).
2) Змінити stderr
на stdout
. Для того, щоб зробити це відредагувати файл /usr/lib/python2.7/dist-packages/CommandNotFound/CommandNotFound.py
і зміни stderr
в stdout
в рядках 237 і 240.
Після цього ви можете використовувати його таким чином:
pbm@ubuntu:~$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git
pbm@ubuntu:~$ `git`
//Installation begins
Якщо ви додасте -y
параметр для apt-get
команд у рядках 237 та 240, ви також можете використовувати синтаксис !! | sh
.
3) Ви також можете змінити цей скрипт із рядка 242 таким чином:
print >> sys.stderr, _("You can install it by typing:")
f = open("%s/.install-missing" % os.path.expanduser('~'),'w')
print >> sys.stderr, "sudo apt-get install %s" % packages[0][0]
print >> f, "sudo apt-get install %s" % packages[0][0]
f.close()
Таким чином ви отримаєте свою команду у файлі ~/.install-missing
, щоб ви могли створити псевдонім:
alias im="chmod +x ~/.install-missing; ~/.install-missing"
Якщо ви телефонуєте, im
пакет буде встановлений.
/usr/lib/command-not-found
але не має посилання наCOMMAND_NOT_FOUND_INSTALL_PROMPT
- думки?