我有一系列的系统调用使用此语法:emacs的打印命令输出
(call-process "/bin/sh" nil nil t "-c" command)
其中command
是shell命令。我想知道当我在commands.el
文件中有这些系统调用时是否有打印输出的方法,我用emacs --script commands.el
来调用它。目前,这些命令被执行,但是所有输出似乎都被捕获并且不被打印。
我有一系列的系统调用使用此语法:emacs的打印命令输出
(call-process "/bin/sh" nil nil t "-c" command)
其中command
是shell命令。我想知道当我在commands.el
文件中有这些系统调用时是否有打印输出的方法,我用emacs --script commands.el
来调用它。目前,这些命令被执行,但是所有输出似乎都被捕获并且不被打印。
它可能更容易让emacs的为您管理的临时缓冲区:
(defun run-it (cmd)
"run CMD in shell and return result as string."
(with-temp-buffer
(call-process "/bin/sh" nil t t "-c" cmd)
(buffer-string)))
如果你想像这样运行一个shell命令,只需使用现有的函数shell-command-to-string即可。代码几乎相同(在simple.el中查找),但自动使用正确的shell等。 – 2012-08-16 10:22:33
这样的事情呢?
(set-buffer (get-buffer-create " output"))
(mapc (function (lambda (cmd) (call-process "/bin/sh" nil t t "-c" cmd)))
'("echo hello"
"perl -e \"die qq(goodbye)\""))
(message "%s" (buffer-string))
在输出结束时输出at -e line 1.
。也许在它之前添加一个空行,或找出一个方法来压制它。
输出通常被收集在当前的缓冲区,但您指定要把它抛弃通过传递'nil'作为第三个参数。您也可以通过此参数指定不同的缓冲区。 – tripleee 2012-08-13 09:27:00
我是否必须将其捕获到临时缓冲区中,然后打印缓冲区?我尝试了't'作为第三个参数,但它也没有打印出来(不知道当作为脚本运行时,“当前缓冲区”是什么)。 – hatmatrix 2012-08-13 10:12:41
这听起来像是一个可行的解决方案,是的。如果你的会话在任何时候都没有设置缓冲区,我猜测当前的缓冲区最终会成为'* scratch *'缓冲区。 (更新:已确认。)其中包含一些注释,因此最好在开始时创建一个新的空缓冲区。 – tripleee 2012-08-13 10:52:25