2015-07-19 3 views
0

Я пытаюсь написать сценарий установки (bash), в котором мне нужно проверить, установлен ли пользователь java 1.8.Перенаправление java и javac output

Очевидный способ сделать это, чтобы позвонить

javac -version | grep 1.8 

, но по какой-то странной причине JAVAC (и Java) выход -версия не может быть перенаправлен - ни |,> или >> - в в первом случае вторая программа не получает никаких входных данных, во втором и третьем, выходной файл пуст после выполнения команды. Я попытался проверить это на трех разных машинах, результат был таким же на каждом из них.

В чем причина этого? Есть ли другой способ проверить версию java?

+0

Вы знаете, что stdout и stderr есть? (также вы можете рассмотреть возможность написания небольшой программы Java 1.3, которая проверяет возможности, предоставляемые JVM, непосредственно с помощью отражения) –

+0

Также, что вы будете делать, когда появится java 1.9? –

+0

Меня не волнует версия 1.9, так как тогда программное обеспечение не будет использоваться. И небольшая программа Java 1.3 не будет работать, если вообще нет Java. – inexxt

ответ

4

Похоже, что вывод отправляется на номер STDERR. Попробуйте это:

javac -version 2>&1 

Это будет перенаправить вывод STDERR на STDOUT. Теперь вы сможете выполнить команду.

Если вы просто хотите, чтобы перенаправить его в файл, просто замените &1 по имени файла, так:

javac -version 2>out 
+0

'2> & 1' не« перенаправляет на stdout вместо stderr ». То, что происходит, это перенаправление stderr на stdout. Это не то же самое;) – fge

+0

@Vivin Paliath - вы абсолютно правы: '2> & 1' перенаправляет как stdout, так и stderr" на одно и то же место ". Это отличное решение этой проблемы. ТАКЖЕ: до недавнего времени я не знал, что этот синтаксис * ALSO * работает в файле Windows/DOS .bat. – paulsm4

+0

@fge К сожалению, вы абсолютно правы. Вот что я хотел сказать :) –