2016-09-07 1 views
0

Je dois obtenir ma version java en utilisant un script c-shell. Je vais devoir le mettre dans une variable et l'utiliser ensuite pour quelques manipulations et tests. en bash cette commande fonctionne:Obtenir la version java dans csh (c shell)

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

mais c-shell, lorsque je tente:

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

Je reçois

"redirect de sortie Ambigu."

erreur. Oui, je dois le faire dans c-shell, pas Bash ou toute autre langue.

J'ai cherché ceci et d'autres forums sur internet mais je n'ai rien trouvé d'utile.

Merci.

+0

lien obligatoire: http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot –

Répondre

2

Voici une manière qui devrait fonctionne pour vous comme pour moi:

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

Les changements sont les suivants:

  • Remplacer $(command) par `command`; la première est la syntaxe de shell POSIX actuelle recommandée mais n'a jamais été implémentée par csh.

  • Remplacer 2>&1 | par |&; le premier est spécifique à Bourne shell, le dernier est spécifique à csh.

  • Remplacer java version par .* version; ce n'est pas strictement nécessaire mais assoupli mes tests comme java -version retours openjdk version... sur ma machine, pas java version...

+0

Quelques explications pourrait être utile, pour une construction comme '| &'. (Les backticks ne sont pas non plus recommandés, mieux vaut les remplacer par $() comme dans la question) – miken32

+0

@ miken32 Explication ajoutée. Notez que l'utilisation de '$()' faisait partie du problème, certainement pas quelque chose à garder. – jlliagre

+0

À droite, j'ai vu votre réponse de la file d'attente de révision et j'ai raté la partie dans la question à propos de ça pour 'csh'. – miken32