¿Cómo capturar la salida estándar de un comando de shell en elisp?


Quiero ejecutar un comando de shell dentro de Emacs y capturar la salida completa a una variable. ¿Hay alguna manera de hacer esto? Por ejemplo, me gustaría poder establecer hello-string a "hello" de la siguiente manera:

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

¿Existe la función capture-stdout-of-shell-command, y si es así, cuál es su nombre real?

Author: Tyler, 2011-02-16

2 answers

¿Cumple shell-command-to-string su propósito?
Por ejemplo:

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

Espero que esto ayude.

 54
Author: Ise Wisteria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-16 09:52:19

Tengo una sugerencia que hacer que amplía la respuesta de Ise Wisteria. Intenta usar algo como esto:

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

Esto debería establecer la cadena "hello" como el valor de my_shell_output, pero limpiamente. Usando (substring) elimina el \n final que suele ocurrir cuando emacs llama a un comando de shell. Me molesta en emacs que se ejecuta en Windows, y probablemente ocurre en otras plataformas también.

 13
Author: Chris McMahan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-29 01:52:13