Что самый легкий путь состоит в том, чтобы выполнить текст от хвоста в командной строке?

Вы выполняете OpenBSD, поскольку Вы - Настольная ОС, и Вы, кажется, должны иметь дело с тем, что Ваш IO не безопасен от любопытных глаз? Хорошо там Нео ;)... Я предложил бы...

Простой cardreader, это - scsi устройство в конце.

Заставьте HD-видео SanDisk карта Класса 6 SDHC 32 ГБ делать 20Mb/s и не забывать softdeps в fstat man mount так как Вы не хотите ожидать, 4 дня обновляют/usr/{src, порты} кроме того, так как память является настолько дешевой в эти дни, Вы могли бы хотеть считать монтирование использования каталога сборки/временного файла файловой системой поршня. Я пошел бы для 32 ГБ, когда я должен был работать от SD-карты :P

10
05.04.2012, 17:03
4 ответа

То, когда Вы вводите команду, которые не делают, существует в Вашей системной функции выполнений удара 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 пакет будет установлен.

8
27.01.2020, 20:02
  • 1
    Хм, это выглядело действительно хорошим, но на самом деле, кажется, не работает над 11,10 сновещательными, /usr/lib/command-not-found но не имеет никакой ссылки на COMMAND_NOT_FOUND_INSTALL_PROMPT - мысли? –  cwd 05.04.2012, 17:01
  • 2
    Хорошо, похож, это - функция, которая будет частью 12,04 точных, (package-import.ubuntu.com/diffs/command-not-found). Я предполагаю, что мне все еще нужно решение для более ранних версий. –  cwd 05.04.2012, 17:18
  • 3
    @cwd деталей: Я обновил свой ответ... –  pbm 05.04.2012, 19:49

Вы были на правильном пути с:

!! 2>&1 | tail -n 1 | sh

... но Вы пропускаете опцию к sh. Рассмотрите:

!! 2>&1 | tail -n 1 | sh -s

И так как Вы, вероятно, должны базироваться, доступ к выполненной Кв. - получает, рассматривает:

!! 2>&1 | tail -n 1 | sudo sh -s
3
27.01.2020, 20:02
  • 1
    Это не работает. sh и sh-s делают то же самое по крайней мере в этом случае. –  Deepak Mittal 06.04.2012, 08:17

Можно сделать что-то вроде этого:

!! 2>&1 | tail -n 1 > /tmp/cmd; bash /tmp/cmd; rm /tmp/cmd

Интерактивные программы, кажется, не работают хорошо с передачей по каналу, потому что она ожидает вход, 'Y' в этом случае, но stdin дескриптор файла закрывается, как только первая команда преобладает.

1
27.01.2020, 20:02

Можно использовать переменную, eval и замена команды, которой я верю (хотя я не уверен, насколько безопасный это все было бы):

TEST_VAR=$(!! 2>&1 | tail -n 1); eval $TEST_VAR

Я готов быть доказанным неправым с вышеупомянутым. Я тестирую это на машине Red Hat с echo команда, а не то автоматическое завершение удара предлагает, но принцип должен быть тем же.

В конце дня это было бы более быстро, чтобы просто ввести мерзавца установки способности...

0
27.01.2020, 20:02

Теги

Похожие вопросы