5

今天我在 emacs shell 中运行了这样的命令:

./someBinary | grep foo | cut -c30- | sort | uniq -c

这在 bash 中需要一点但不会那么长(大约 15 秒),因为输出很容易超过一百万行。但是,当我在 emacs shell 中运行此命令时,我等了一个多小时,它仍在运行,如果我检查top. 我想知道这是否是因为 emacs 实现了我在 lisp 中使用的 unix 工具——如果这是原因,是否有办法让它默认为系统工具。

4

3 回答 3

3

Emacs 正在捕获 shell 缓冲区中的最终输出,并应用字体锁定和其他分析(例如行号计数)来显示它。它还滚动显示以显示最新的输出。虽然 Emacs 提供了剔除病态长命令输出的规定,但它并没有真正针对数百万行的真正大量输出进行优化,因此它的性能明显比终端仿真器差,从而减慢了整个管道。

如果您对输出不感兴趣,请将其重定向到/dev/nulltail -500,这就是您在典型的终端回滚中看到的内容。

于 2012-11-01T06:16:52.250 回答
2

不,emacs 没有实现这些工具。即运行您从命令行运行的相同工具。但是,输出正在通过各种管道传递,并且可能具有 emacs 应用的各种格式,这很可能是极端减速的罪魁祸首。一件容易尝试的事情是在 shell 缓冲区中禁用字体锁定模式。

于 2012-11-01T00:54:13.100 回答
0

你没有说你是否使用eshellshell。以我的经验,shell工作得很好,但eshell对于任何想要通过管道放置 >1k 行的东西来说完全无法使用(这很可悲,因为 eshell 的其他功能看起来很不错)。

请注意,即使输出只是一行,eshell 也会很慢,只要您使用 a |,因此它似乎是实际的|运算符(在 eshell 中的 emacs-lisp 中实现)很慢。

于 2016-01-27T09:36:51.227 回答