msys 不刷新输出

msys not flushing output

我在 windows 上将 mingw 与 msys 和 mintty 一起使用。我有一个问题,msys 和 mintty 在命令完成之前以某种方式不刷新输出。这意味着我真的无法 运行 任何交互式程序。

例如,如果我在 C:

printf("Test\n");

在程序终止之前不会出现输出。但是,如果我有:

printf("Test\n"); fflush(stdout);

然后输出立即出现。如果我使用没有 mintty 的 msys 或 windows 控制台,那么一切正常。

所以我的问题是,msys 和 mintty 是怎么回事?

msys 在许多情况下使用 rxvt shell 时,这可能是一个问题。在我看到这个问题的情况下,我要求 msys 为其控制台使用本机 Windows shell。例如:

C:\MinGW\msys.0\msys.bat --no-rxvt

我认为现代 MSYS 安装默认使用本机 shell,因为 MSYS 开发人员似乎更喜欢它。我有一些关于原生 shell 的其他问题促使我使用 rxvt shell,所以我很少 运行 解决这个问题。

C:\MinGW\msys.0\msys.bat --rxvt

我发现 rxvt shell 通常工作正常,除了某些应用程序构建为 "console" 实用程序意味着 运行一个命令行。

唯一对我有用的是在命令之前加上 winpty ...

$ winpty java ClassName

它导致无缓冲输出慢 3 倍,缓冲输出慢 5 倍(在我的例子中,Java)。


总是让 winpty 不可见地调用命令 ...

$ cd ~
$ pwd -W

... 将以下行添加到 .bashrc ...

alias java="winpty java"

...然后重新启动终端并忽略(一次性)警告消息。