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. ------------- Commit messages: - 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 Changes: https://git.openjdk.org/jdk/pull/18996/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=18996&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8330998 Stats: 212 lines in 3 files changed: 209 ins; 0 del; 3 mod Patch: https://git.openjdk.org/jdk/pull/18996.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/18996/head:pull/18996 PR: https://git.openjdk.org/jdk/pull/18996