Linux stderr的输出将改为stdout

Linux stderr的输出将改为stdout,linux,emacs,stdout,stderr,eshell,Linux,Emacs,Stdout,Stderr,Eshell,我面临着一个奇怪的问题;每当我在eshell中运行命令时(无论是简单的命令、复杂的应用程序还是玩具示例),每个应该转到stderr的输出都会转到stdout 这是一个例子: #include <iostream> int main() { std::cerr << "ERROR\n"; std::cout << "OUTPUT\n"; } 使用shell、term或外部终端启动相同的命令,效果与预期相同。甚至在eshell内部启动dash、s

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

这是一个例子:

#include <iostream>

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

}
使用
shell
term
或外部终端启动相同的命令,效果与预期相同。甚至在
eshell
内部启动
dash
sh
bash
,然后启动程序也能正常工作

这是一个
eshell
bug吗?可能是我这边的配置不对吗? 我的emacs版本是GNU emacs 24.3.1

谢谢,, 尼古拉斯来自:

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

有些事情埃舍尔就是做得不好。它填补了IELM和您的系统外壳之间的利基,即特殊用例所在的位置,而在利基之外,它并不理想

这足以让我害怕使用它来支持bash或zsh。

来自:

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

有些事情埃舍尔就是做得不好。它填补了IELM和您的系统外壳之间的利基,即特殊用例所在的位置,而在利基之外,它并不理想


这足以让我害怕使用它来支持bash或zsh。

看起来像是一个eshell bug。Eshell的信息中有一个关于重定向的部分,但是那里根本没有提到stderr。看起来像是Eshell的bug。Eshell的信息中有一个关于重定向的部分,但是那里根本没有提到stderr。
~ $ ./a.out 2> /dev/null
ERROR
OUTPUT