On Mon, 29 Apr 2024 14:56:23 GMT, Jan Lahoda <[email protected]> wrote:
>> Consider code like:
>>
>> public class ConsoleTest {
>> public static void main(String... args) {
>> System.console().printf("Hello!");
>> }
>> }
>>
>>
>> When run as:
>>
>> $ java ConsoleTest.java >/dev/null
>>
>>
>> it prints `Hello!` to stderr, instead of to stdout (where it would be
>> redirected).
>>
>> The proposed fix is to simply force the use of stdout. Sadly, this cannot be
>> done solely using JLine configuration, we actually need to change the
>> JLine's code for that.
>>
>> The most tricky part is a test. There are two sub-tests, one effectively
>> testing a case where all of stdin/out/err are redirected, the other is
>> attempting to test the case where stdin is attached to a terminal, while
>> stdout is redirected. The second sub-test using a native functions to create
>> a pty and to attach to it, and should run in a separate VM, as it leaves the
>> VM attached to the terminal.
>
> Jan Lahoda has updated the pull request with a new target base due to a merge
> or a rebase. The incremental webrev excludes the unrelated changes brought in
> by the merge/rebase. The pull request contains six additional commits since
> the last revision:
>
> - Merge branch 'master' into JDK-8330998
> - Fixing test.
> - Attempting to stabilize the test.
> - Improving test to really test the redirect while stdin is connected to a
> terminal.
> - Fixing typo.
> - 8330998: System.console() writes to stderr when stdout is redirected
I think it's a feature when System.console() actually writes to the tty if
stdout is redirected. After all it's not System.out. Of course the question is
if it should write to stderr or /dev/tty like mechanism..
-------------
PR Comment: https://git.openjdk.org/jdk/pull/18996#issuecomment-2083542510