How to capture standard output of a shell command in elisp?
我想在Emacs中运行shell命令并将完整输出捕获到变量。 有没有办法做到这一点? 例如,我希望能够以下列方式将hello-string设置为"hello":
1
| (setq hello-string (capture-stdout-of-shell-command"/bin/echo hello")) |
函数capture-stdout-of-shell-command是否存在,如果存在,它的真实名称是什么?
shell-command-to-string符合您的目的吗?
例如:
1
| (shell-command-to-string"/bin/echo hello") |
希望这可以帮助。
我有一个建议,这延伸了Ise Wisteria的答案。 尝试使用这样的东西:
1 2 3 4
| (setq my_shell_output
(substring
(shell-command-to-string"/bin/echo hello")
0 -1)) |
这应该将字符串"hello"设置为my_shell_output的值,但要干净利落。 使用(substring)消除了当emacs调用shell命令时往往会发生的尾随
。 它在Windows上运行的emacs中困扰我,也可能在其他平台上发生。
-
我注意到emacs在Mac OS X和Linux上都这样做,所以它不仅仅是NTEmacs。
-
(defun my-shell-command-to-string (&rest cmd) (replace-regexp-in-string"
?
$""" (shell-command-to-string (mapconcat 'identity cmd""))))
-
@spacebat你想要\\',而不是$。
-
echo hello是hello
。
-
在linux / osx中,您可以使用-n来停止输出尾随换行符。<5233>