Получить версию Java в csh (c shell)

Мне нужно получить версию Java, используя скрипт c-shell. Мне нужно будет поместить его в переменную и впоследствии использовать для некоторых манипуляций и тестов. в bash эта команда работает:

local javaVersion=$(java -version 2>&1 | sed 's/java version "\(.*\)\.\(.*\)\..*"/\1\2/; 1q')

но в c-shell, когда я пытаюсь:

set javaVersion=$(java -version 2>&1 | sed 's/java version "\(.*\)\.\(.*\)\..*"/\1\2/; 1q')

я получил

"Неоднозначное перенаправление вывода."

ошибка.

Да, я должен сделать это в c-shell, а не в Bash или любом другом языке.

Я искал этот и другие форумы в Интернете, но не нашел ничего полезного.

Благодарю.

1 ответ

Решение

Вот способ, который должен работать для вас так же, как и для меня:

> set javaVersion=`java -version |& sed 's/.* version "\(.*\)\.\(.*\)\..*"/\1\2/; 1q'`
> echo $javaVersion
18

Изменения:

  • замещать $( command ) от `command`; первый является рекомендуемым текущим синтаксисом оболочки POSIX, но никогда не был реализован csh,

  • замещать 2>&1 | от |&; первый характерен для оболочки Bourne, последний csh конкретный.

  • замещать java version от .* version; это не является строго необходимым, но облегчило мои тесты как java -version возвращается openjdk version... на моей машине нет java version...

Другие вопросы по тегам