Раньше я думал
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
не задан.