Passer des variables d’environnement à un processus

Je viens de trouver cet extrait de code:

$ DEVELOPMENT=1 node dev-mode.js 

Cette ligne exécute le programme node.js et définit la variable d’environnement DEVELOPMENT . Je ne comprends pas ce que le mécanisme est utilisé pour définir la variable env? Est-ce la syntaxe valide:

 $ [var1=value1 var2=value2] [process_name process_params] ? 

Il y a deux façons de définir les variables pass à partir de votre shell actuel, un programme en cours d’exécution,

Soit utilisez la fonction d’ export intégrée avec la syntaxe comme

 $ export MYVALUE=5 $ echo "MYVALUE is $MYVALUE" MYVALUE is 5 

Cette syntaxe permet à la variable de prendre effet dans le shell courant dans tous les sous-shells suivants que vous invoquez (substitution de commande ou substitution de processus, etc.) et la variable rest active même après la fin des sous-shells.

(ou) comme demandé dans la question, si vous l’envoyez directement à la commande en tant que

 $ MYVALUE=5 bash -c 'echo "MYVALUE is $MYVALUE"' MYVALUE is 5 

la valeur est transmise uniquement au sous-shell (celui démarré avec bash -c ) et n’a aucun effet sur le shell parent une fois qu’il est terminé. Vous pouvez MYVALUE observer le MYVALUE de la syntaxe ci-dessus, il sera vide.

 $ echo $MYVALUE $ 

J’espère que ça répond à ta question.

Cet exemple devrait démontrer:

 X=0; Y=1; #set X and Y #set X, Y for the child and have it expand and print those vars X=42 Y=43 sh -c 'echo $X $Y' #print the same vars in the parent echo $X $Y 

le

 var0=val0 var1=val1... command 

la syntaxe fait en sorte que la liste de variables précédant la commande a été temporairement affectée aux valeurs correspondantes et que les variables ont été exscopes comme avec

 export var0 

Après l’exécution de la commande, les variables de la liste de variables ont leurs valeurs d’origine et leur état d’exportation (= leur propagation automatique aux processus enfants) restaurés.

L’exemple imprime

 42 43 0 1 

Oui, c’est une syntaxe valide, elle est décrite dans la section Simple Commands de l’ man bash :

Une commande simple est une séquence d’affectations de variables facultatives, suivie de mots et de redirections séparés par des blancs, et terminée par un opérateur de contrôle. Le premier mot spécifie la commande à exécuter et est passé en argument zéro. Les mots restants sont passés en arguments à la commande invoquée.