-->

msys not flushing output

2019-03-02 19:44发布

问题:

I'm using mingw with msys and mintty on windows. I have a problem that msys and mintty are somehow not flushing output until a command is finished. This means I can't really run any interactive programs.

For example, if I have in C:

printf("Test\n");

the output won't appear until the program has terminated. However, if I have:

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

then the output appears immediately. If I use msys without mintty or the windows console, then everything works normally.

So my question, what's going on with msys and mintty?

回答1:

This can be an issue when msys uses the rxvt shell under a number of scenarios. In cases where I see this problem, I ask msys to use the native Windows shell for its console. For example:

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

I thought that modern MSYS installations default to using the native shell as MSYS developers seem to prefer it. I have other issues with the native shell that drive me to use the rxvt shell, so I do infrequently run into this issue.

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

I find that the rxvt shell usually works fine except for certain applications that are built as "console" utilities meant to run from a command-line.



回答2:

The only thing that worked for me was to precede the command with winpty ...

$ winpty java ClassName

It causes unbuffered output to be 3x slower and buffered output to be 5x slower (in my case, with Java).


To always have a command invisibly invoked by winpty ...

$ cd ~
$ pwd -W

... add the following line to .bashrc ...

alias java="winpty java"

... then restart terminal and ignore the (one-time) warning message.