web-dev-qa-db-fra.com

Sortie de la commande de magasin de scripts Bash dans une variable

J'ai un problème concernant l'enregistrement de la sortie d'une commande dans une variable dans un script bash.
Je sais qu'en général, il y a deux façons de faire cela.

non plus

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

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

J'ai fait:

version=$(Java --version)

Cela ne stocke pas la valeur à l'intérieur de la var. Il l’imprime même, ce qui ne devrait vraiment pas être le cas.

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

57
user1278282
 version=$(Java -version 2>&1)

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

Sidenote, utiliser deux tirets est un standard non officiel sur les systèmes Unix, mais puisque Java tente d'être presque identique sur différentes plates-formes, il viole les attentes Unix/Linux et se comporte de la même manière à cet égard que sur Windows, et comme je le soupçonne, sur Mac OS.

67
user unknown

C'est parce que Java -version écrit dans stderr et non pas stdout. Tu devrais utiliser:

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

Afin de rediriger stderr vers stdout.

Vous pouvez le voir en lançant les 2 commandes suivantes:

Java -version > /dev/null

Java -version 2> /dev/null
15
Eran Ben-Natan