首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在后台保存*shell命令输出*缓冲区?

问如何在后台保存*shell命令输出*缓冲区?
EN

Stack Overflow用户
提问于 2012-07-23 21:56:13
回答 4查看 2.8K关注 0票数 9

我如何告诉emacs在调用像这样的*Shell Command Output*命令时不弹出shell缓冲区?

代码语言:javascript
复制
(shell-command MY_COMMAND)

当前emacs将当前窗口一分为二,显示输出缓冲区(大部分是不相关的)。对我来说,如果我想以后再去查一查,那就足够了。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-23 23:08:01

也许使用shell-command是问题的根源。我想我用call-process找到了一个有效的解决方案,尽管可能有更优雅的方式:

代码语言:javascript
复制
(call-process-shell-command
 "cat ~/.emacs.d/init.el"
 nil "*Shell Command Output*" t
 )
票数 11
EN

Stack Overflow用户

发布于 2012-07-23 22:08:14

shell-command有一个可选参数OUTPUT-BUFFER,您可以在其中指定要输出到的缓冲区。如果它是t (实际上不是buffer-name,也不是nil),它将在当前缓冲区中输出。因此,我们将其封装到一个with-temp-buffer中,再也不用为它操心了:

代码语言:javascript
复制
(with-temp-buffer
  (shell-command "cat ~/.emacs.d/init.el" t))
票数 9
EN

Stack Overflow用户

发布于 2019-06-28 07:01:35

根据我的经验,如果 shell命令本身没有产生输出,那么emacs *Shell Command Output*缓冲区就不会弹出。

因此,要避免输出缓冲区,请使命令的输出静默。

一种简单的方法是:

  • 将" > /dev/null 2>&1"添加到任何外壳命令的末尾。

(警告:我不确定/dev/null是否存在于100%可以运行emacs的平台上,但在每个Linux发行版上都应该可以。)

如果对elisp函数shell-command的调用是在elisp脚本中进行的,那么您可以更改以下内容:

代码语言:javascript
复制
(shell-command cmd)

要这样做:

代码语言:javascript
复制
(shell-command (concat cmd " > /dev/null 2>&1"))

如果您偶尔想要监视输出,那么您可以创建一个通过/dev/null抑制输出的包装器函数,以及一个没有抑制的包装器函数,并根据需要在它们之间切换。

上述建议在lcy01-07上的GNU Emacs24.5.1 (x86_64-pc-linux-gnu,GTK+ Version 3.18.9)上进行了测试

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11613974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档