Раньше я думал
System.console() != null
был надежным способом определить, является ли оболочка, запускающая мое приложение Java, интерактивной или нет. Это позволило мне использовать ANSI escape-последовательности в интерактивном режиме и обычный System.out/System.err всякий раз, когда выход программы был перенаправлен в файл или подключен к модулю какого-либо другого процесса, подобно режиму --color=auto многих утилит GNU.
System.console() отличается от Windows. Хотя метод возвращает значение не null, когда JVM запускается из cmd.exe (что для меня бесполезно, поскольку cmd.exe не понимает escape-последовательности), возвращаемое значение всегда null, когда я запускаю свою программу из любого из эмуляторов терминала, доступных в Cygwin - xterm, mintty или cygwin (последний - это просто cmd.exe, выполняющий дочерний процесс bash)..
Как проверить интерактивную оболочку в Java без чтения $- в сценариях оболочки и передать аргументы командной строки моей программе Java? Тестирование переменной PS1 окружения из Java не является вариантом, так как Java запускается из оболочки script, поэтому родительский процесс является неинтерактивной оболочкой, а PS1 не задан.