60 votes

Bash script stocker la sortie de commande dans une variable

J'ai un problème concernant le stockage de la sortie d'une commande à l'intérieur d'une variable dans un script bash.
Je sais qu'en général, il y a deux façons de procéder

soit

foo=$(bar)
# or
foo=`bar`

mais pour la requête de la version Java, cela ne semble pas fonctionner.

Je l'ai fait :

version=$(java --version)

La valeur n'est pas stockée dans la variable, elle est même imprimée, ce qui ne devrait pas être le cas.

J'ai également essayé de rediriger la sortie vers un fichier mais cela échoue également.

71voto

user unknown Points 15555
 version=$(java -version 2>&1)

Le paramètre version ne prend qu'un seul tiret, et si vous redirigez stderr, c'est-à-dire l'endroit où le message est écrit, vous obtiendrez le résultat souhaité.

En passant, l'utilisation de deux tirets est une norme officieuse sur les systèmes de type Unix, mais comme Java essaie d'être presque identique sur différentes plates-formes, il viole les attentes d'Unix/Linux et se comporte à cet égard de la même manière que sous Windows, et comme je le soupçonne, sous Mac OS.

16voto

Eran Ben-Natan Points 1074

C'est parce que java -version écrit à stderr et non stdout . Vous devez utiliser :

version=$(java -version 2>&1)

Afin de rediriger stderr a stdout .

Vous pouvez le voir en exécutant les 2 commandes suivantes :

java -version > /dev/null

java -version 2> /dev/null

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X