1

我在 Windows 上使用 mingw 和 msys 和 mintty。我有一个问题,msys 和 mintty 在命令完成之前不会刷新输出。这意味着我不能真正运行任何交互式程序。

例如,如果我有C

printf("Test\n");

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

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

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

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

4

2 回答 2

2

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

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

我认为现代 MSYS 安装默认使用本机 shell,因为 MSYS 开发人员似乎更喜欢它。我的本机 shell 有其他问题促使我使用rxvt shell,所以我很少遇到这个问题。

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

我发现rxvt shell 通常可以正常工作,除了某些构建为“控制台”实用程序的应用程序,这些应用程序旨在从命令行运行。

于 2016-04-27T18:01:07.023 回答
1

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

$ winpty java ClassName

它导致无缓冲输出慢 3 倍,缓冲输出慢 5 倍(在我的情况下,使用 Java)。


总是有一个命令不可见地被winpty...调用

$ cd ~
$ pwd -W

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

alias java="winpty java"

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

于 2019-02-13T20:25:03.100 回答