Ответ 1
Есть ли какая-либо особая причина для результатов java -version, идущих на stderr?
AFAIK, нет особой причины. Это как команда java
была/реализована. Вероятно, все возвращается к Java 1.0, хотя было бы очень сложно это проверить.
Мое краткое исследование показывает, что это поведение несовместимо с тем, как ведут себя большинство команд Linux... все, что я пробовал, использует stdout для информации о версии. (В конце концов, информация о версии не является результатом "ошибки".)
Обратите внимание, однако --version
/-version
параметры - это соглашение, а не что-то, требуемое любым формальным стандартом. (стандарты кодирования GNU сообщают, что команды должны реализовывать --version
, и эта информация о версии должна быть записана на стандартный вывод. Но стандарты POSIX не упомянуть об этом, а также стандарты LSB.)
Что вы можете/должны делать?
- Сложно удалить stderr вместо stdout в вашей оболочке script или пакетном файле.
- При этом не должно быть риска. Oracle не может изменить цепочки инструментов Java, чтобы отправить вывод
-version
на stdout без потенциально нарушающих клиентские скрипты. Это маловероятно 1.
1 - Это свидетельствует о том, насколько маловероятно: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4380614. Обратите внимание на "Разрешение: Wont Fix"... и заключительный комментарий.