Comportement étrange de l’atsortingbution des variables Bash

J’essaie d’écrire un script bash, alors que je suis coincé ici:

Je ne comprends pas pourquoi cela fonctionne:

MSG=$(pwd) echo $MSG 

Sortie:

 /home/harsh/source/git/trunk 

MAIS ceci ne fait pas:

 MSG=$(java -version) echo $MSG 

Sortie:

BLANC

S’il vous plaît aider!

Certaines commandes peuvent nécessiter 2>&1 à la fin pour obtenir une sortie:

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

Il envoie n’importe quelle erreur standard (2) à l’endroit où la sortie standard (1) est redirigée.

Les messages d’erreur sont généralement écrits dans le stream d’erreur standard stderr au lieu de la sortie standard du stream de sortie. Si java -version génère une erreur à la place de ce que vous attendiez (impression de la version), cela sera probablement le cas pour stderr . Il est également possible que les informations de version puissent également être imprimées sur stderr .

La substitution de commande $() prend la sortie de stdout de ce qui est à l’intérieur de $() et la remplace à sa place. En cas d’erreur, cela ne peut être rien. Si vous tapez ceci depuis un terminal, vous devriez toujours voir toute sortie (par exemple des messages d’erreur) du stderr de java dans le terminal.