Вы выполняете OpenBSD, поскольку Вы - Настольная ОС, и Вы, кажется, должны иметь дело с тем, что Ваш IO не безопасен от любопытных глаз? Хорошо там Нео ;)... Я предложил бы...
Простой cardreader, это - scsi устройство в конце.
Заставьте HD-видео SanDisk карта Класса 6 SDHC 32 ГБ делать 20Mb/s и не забывать softdeps в fstat man mount
так как Вы не хотите ожидать, 4 дня обновляют/usr/{src, порты} кроме того, так как память является настолько дешевой в эти дни, Вы могли бы хотеть считать монтирование использования каталога сборки/временного файла файловой системой поршня. Я пошел бы для 32 ГБ, когда я должен был работать от SD-карты :P
То, когда Вы вводите команду, которые не делают, существует в Вашей системной функции выполнений удара command_not_found_handle()
. В этой функции существует вызов к /usr/lib/command-not-found
сценарий, который печатает сообщения.
Мое первое предположение, которое изменит источник этого сценария для печати сообщений к 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:
К сожалению, существует нет 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
пакет будет установлен.
Вы были на правильном пути с:
!! 2>&1 | tail -n 1 | sh
... но Вы пропускаете опцию к sh. Рассмотрите:
!! 2>&1 | tail -n 1 | sh -s
И так как Вы, вероятно, должны базироваться, доступ к выполненной Кв. - получает, рассматривает:
!! 2>&1 | tail -n 1 | sudo sh -s
Можно сделать что-то вроде этого:
!! 2>&1 | tail -n 1 > /tmp/cmd; bash /tmp/cmd; rm /tmp/cmd
Интерактивные программы, кажется, не работают хорошо с передачей по каналу, потому что она ожидает вход, 'Y' в этом случае, но stdin дескриптор файла закрывается, как только первая команда преобладает.
Можно использовать переменную, eval
и замена команды, которой я верю (хотя я не уверен, насколько безопасный это все было бы):
TEST_VAR=$(!! 2>&1 | tail -n 1); eval $TEST_VAR
Я готов быть доказанным неправым с вышеупомянутым. Я тестирую это на машине Red Hat с echo
команда, а не то автоматическое завершение удара предлагает, но принцип должен быть тем же.
В конце дня это было бы более быстро, чтобы просто ввести мерзавца установки способности...
/usr/lib/command-not-found
но не имеет никакой ссылки наCOMMAND_NOT_FOUND_INSTALL_PROMPT
- мысли? – cwd 05.04.2012, 17:01