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