将输出到stderr的内容改为输出到stdout。

3
我遇到一个奇怪的问题;无论我在eshell中运行一个简单的命令、一个复杂的应用程序或一个玩具示例,所有应该输出到stderr的输出都会被发送到stdout。以下是一个示例:
#include <iostream>

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

}

我收到了以下内容:
~ $ ./a.out 2> /dev/null
ERROR
OUTPUT

使用shellterm或外部终端启动相同的命令可以正常工作。甚至在eshell中启动dashshbash,然后再启动程序也可以正常工作。

这是一个eshell的bug吗?还是我配置有误? 我的emacs版本是GNU Emacs 24.3.1

谢谢, Nikolas


1
似乎是eshell的一个错误。Eshell的info中有一个关于重定向的部分,但stderr在那里根本没有提到。 - choroba
1个回答

0

来自 Eshell文档

1.2 Eshell不是什么

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

Eshell有些事情做得不好。它填补了IELM和系统shell之间的空白,适用于特殊的用例,但在该领域之外则不太理想。

这足以让我放弃使用它,转而使用bash或zsh。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接