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"
...然后重新启动终端并忽略(一次性)警告消息。
我在 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"
...然后重新启动终端并忽略(一次性)警告消息。