Reputation: 42090
I want to run a shell command within Emacs and capture the full output to a variable. Is there a way to do this? For example, I would like to be able to set hello-string
to "hello"
in the following manner:
(setq hello-string (capture-stdout-of-shell-command "/bin/echo hello"))
Does the function capture-stdout-of-shell-command
exist, and if so what is its real name?
Upvotes: 52
Views: 18658
Reputation: 409
Finally, the "git log" "--reverse" option came in handy ). Open a buffer with the current buffer file as of the most initial commit.
(vc-revision-other-window (car (process-lines "git" "log" "--format=%h" "--reverse")))
And on the question of
(setq hello-string (car (process-lines "echo" "hello")))
Upvotes: 1
Reputation: 11669
Does shell-command-to-string
meet your purpose?
For example:
(shell-command-to-string "/bin/echo hello")
Upvotes: 84
Reputation: 2690
I have a suggestion to made that extends Ise Wisteria's answer. Try using something like this:
(setq my_shell_output
(substring
(shell-command-to-string "/bin/echo hello")
0 -1))
This should set the string "hello"
as the value of my_shell_output
, but cleanly. Using (substring)
eliminates the trailing \n
that tends to occur when emacs calls out to a shell command. It bothers me in emacs running on Windows, and probably occurs on other platforms as well.
Upvotes: 29