【问题标题】:Output to stderr is instead going to stdout到 stderr 的输出改为到 stdout
【发布时间】:2015-10-02 10:57:55
【问题描述】:

我遇到了一个奇怪的问题;每当我在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 错误吗?会不会是我这边的一些错误配置? 我的emacs版本是GNU Emacs 24.3.1

谢谢你, 尼古拉斯

【问题讨论】:

  • 看起来像一个 eshell 错误。 Eshell 的 info 有一个关于重定向的部分,但根本没有提到 stderr。

标签: linux emacs stdout stderr eshell


【解决方案1】:

来自the Eshell documentation

1.2 Eshell 不是什么

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

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

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

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    相关资源
    最近更新 更多