Как захватить стандартный вывод команды оболочки в elisp? - PullRequest
35 голосов
/ 16 февраля 2011

Я хочу запустить команду оболочки в Emacs и записать полный вывод в переменную.Есть ли способ сделать это?Например, я хотел бы иметь возможность установить hello-string на "hello" следующим образом:

(setq hello-string (capture-stdout-of-shell-command "/bin/echo hello"))

Существует ли функция capture-stdout-of-shell-command, и если да, то каково ее настоящее имя?

Ответы [ 2 ]

58 голосов
/ 16 февраля 2011

Соответствует ли shell-command-to-string вашей цели?
Например:

(shell-command-to-string "/bin/echo hello")

Надеюсь, это поможет.

16 голосов
/ 16 февраля 2011

У меня есть предложение, которое расширяет ответ Исе Глицинии. Попробуйте использовать что-то вроде этого:

(setq my_shell_output
  (substring 
    (shell-command-to-string "/bin/echo hello") 
   0 -1))

Это должно установить строку "hello" как значение my_shell_output, но без ошибок. Использование (substring) устраняет завершающий \n, который имеет место, когда emacs вызывает команду shell. Это беспокоит меня в emacs, работающем под Windows, и, вероятно, происходит и на других платформах.

...