2011-10-19 12 views
16

Desidero impostare una variabile di ambiente quando si esegue un programma tramite child_process.exec. È possibile?NodeJS imposta la variabile di ambiente per exec

ho provato a fissare il env in questo modo:

exec('FOO', {'FOO': 'ah'}, function(error, stdout, stderr) {console.log(stdout, stderr, error);}); 

ma il messaggio risultante detto FOO non esisteva.

risposta

37

È necessario passare un oggetto opzioni che include la chiave env il cui valore è esso stesso un oggetto di coppie di valori chiave.

exec('echo $FOO', {env: {'FOO': 'ah'}}, function (error, stdout, stderr) 
{ 
    console.log(stdout, stderr, error); 
}); 
+28

Chiunque utilizzi questo dovrebbe prendere atto che specifica le variabili d'ambiente in questo modo sostituisce l'insieme _entire_ di variabili d'ambiente, * * compreso qualsiasi 'path' che altrimenti potrebbero esistere. Quindi, se provi a impostare una variabile env e improvvisamente ricevi degli errori sul comando che stai cercando di eseguire, non è stato trovato, ecco perché. Questo non è affatto chiaro dalla documentazione e mi ha lasciato grattarmi la testa per un po '. Se si desidera aggiungere variabili env e rimanere indipendenti dalla piattaforma, è possibile creare una copia di 'process.env', applicare le proprie modifiche e passarlo a' child_process.exec'. – DanielSmedegaardBuus

+1

È inoltre possibile aggiornare il comando 'process.env'. Es: 'process.env [" PATH "] + = path.delimiter + process.cwd() + path.sep +" node_modules "+ path.sep +" .bin "' – mems

Problemi correlati