gpt4 book ai didi

linux - 到 stderr 的输出改为到 stdout

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:27:14 25 4
gpt4 key购买 nike

我遇到了一个奇怪的问题;每当我在 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

谢谢,尼古拉斯

最佳答案

来自 the Eshell documentation :

1.2 What Eshell is not

Eshell is not a replacement for system shells such as bash or zsh. Use Eshell when you want to move text between Emacs and external processes; if you only want to pipe output from one external process to another (and then another, and so on), use a system shell, because Emacs’s IO system is buffer oriented, not stream oriented, and is very inefficient at such tasks. If you want to write shell scripts in Eshell, don’t; either write an elisp library or use a system shell.

Some things Eshell just doesn’t do well. It fills the niche between IELM and your system shell, where the peculiar use-cases lie, and it is less than ideal outside that niche.

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

关于linux - 到 stderr 的输出改为到 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32905702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com