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.
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.
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