在emacs shell中命令运行得慢得多吗?我怎样才能防止这种情况但仍然使用它?

时间:2012-10-31 23:50:19

标签: unix emacs

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

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

在bash中占用一点但不长(约15秒),因为输出容易超过一百万行。然而,当我在emacs shell中运行此命令时,我等了一个多小时它仍在运行,如果我使用top检查,这些进程明显有效。我想知道这是不是因为emacs实现了我在lisp中管道的unix工具 - 如果这是原因,如果有办法让它默认为系统的那些。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您没有说明是否使用eshellshell。根据我的经验,shell工作正常,但eshell完全无法用于任何想要通过管道放置> 1k行(这很难过,因为eshell的其他功能看起来很不错)

注意,即使输出只是一行,eshell也很慢,只要你使用|,所以它似乎是实际的|运算符(在eshell中的emacs-lisp中实现)这很慢。