Эквивалент "exec" в emacs * eshell *? - PullRequest
5 голосов
/ 16 марта 2012

Я хочу написать функцию eshell, которая обертывает существующий сценарий командной строки. Чтобы сделать это, я хочу иметь возможность выполнить команду оболочки из функции eshell. Моим первым инстинктом было сделать что-то вроде

(defn eshell/myfunc ()
  (shell-command "mycommand"))

И этот вид работает, за исключением нескольких проблем. Он работает в подчиненной оболочке, а не ведет себя как настоящая команда "exec". Это означает, что, помимо прочего, команда «myfunc» в eshell блокируется во время выполнения команды. Выходные данные «mycommand» собираются и появляются в конце буфера «Shell Output», но они не повторяют поведение обычной функции оболочки, когда во время работы появляется стандартный вывод.

Итак, как правильно это сделать?

1 Ответ

2 голосов
/ 17 марта 2012

Попробуйте

(start-process-shell-command "foo" (current-buffer) "mycommand")

Если вам нужно больше контроля, см. Руководство по ссылкам на Emacs Lisp , Раздел 37.4 Создание асинхронного процесса .

...