1

我面临一个奇怪的问题;每当我在其中运行命令eshell(无论是简单命令、复杂应用程序还是玩具示例)时,每个应该去的输出stderr都会stdout改为去。

这是一个例子:

#include <iostream>

int main()
{
   std::cerr << "ERROR\n";
   std::cout << "OUTPUT\n";

}

我得到以下信息:

~ $ ./a.out 2> /dev/null
ERROR
OUTPUT

shell使用,term或外部终端启动相同的命令按预期工作。即使启动其中一个dashshbash在内部eshell启动然后启动程序也可以。

这是一个eshell错误吗?会不会是我这边的一些错误配置?我的emacs版本是GNU Emacs 24.3.1

谢谢你,尼古拉斯

4

1 回答 1

0

Eshell 文档

1.2 Eshell 不是什么

Eshell 不能替代 bash 或 zsh 等系统 shell。当你想在 Emacs 和外部进程之间移动文本时使用 Eshell;如果您只想将一个外部进程的输出通过管道传输到另一个(然后是另一个,等等),请使用系统 shell,因为 Emacs 的 IO 系统是面向缓冲区的,而不是面向流的,并且在此类任务中效率非常低。如果您想在 Eshell 中编写 shell 脚本,请不要;要么编写一个 elisp 库,要么使用一个系统外壳。

Eshell 有些事情做得不好。它填补了 IELM 和您的系统外壳之间的利基,其中存在特殊的用例,并且在该利基之外它并不理想。

这足以让我不敢使用它来支持 bash 或 zsh。

于 2015-10-02T12:42:55.460 回答