2016-09-07 14 views
0

Мне нужно получить мою версию java с помощью скрипта c-shell. Мне нужно будет ввести его в переменную и использовать его для некоторых манипуляций и тестов. в Баш эта команда работает:Получить java-версию в csh (c shell)

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

, но в с-оболочки, когда я пытаюсь:

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

Я получаю

"неоднозначные выход редирект."

погрешность.

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

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

Спасибо.

+0

Обязательная ссылка: http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot –

ответ

2

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

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

Изменения:

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

  • Заменить 2>&1 | на |&; первая - специфическая оболочка Бурна, последняя - csh.

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

+0

Некоторые объяснения может быть полезно, для конструкции типа '| &'. (Также backticks не рекомендуется синтаксис, лучше заменить на '$()' как в вопросе) – miken32

+0

@ miken32 Пояснение добавлено. Обратите внимание, что использование '$()' было частью проблемы, определенно не для чего-то. – jlliagre

+0

Правильно, я увидел ваш ответ из очереди обзора и пропустил часть вопроса о этом существе для 'csh'. – miken32