2011-10-19 14 views
16

Chcę ustawić zmienną środowiskową podczas uruchamiania programu przez child_process.exec. czy to możliwe?Zmienna środowiskowa zestawu NodeJS dla exec

Próbowałem ustawienie env takiego:

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

ale otrzymany komunikat powiedział FOO nie istnieje.

Odpowiedz

37

Musisz przekazać obiekt opcji, który zawiera klucz, którego wartość sama jest obiektem par wartości klucza.

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

Każdy użytkownik powinien to wziąć pod uwagę, że określenie zmiennych środowiskowych w ten sposób zastępuje zestaw _entire_ zmiennych środowiskowych, w tym * * każdej 'PATH' które mogłyby istnieć. Tak więc, jeśli spróbujesz ustawić zmienną env i nagle dostaniesz błędy dotyczące polecenia, które próbujesz nie znaleźć, to właśnie dlatego. To nie jest wcale jasne z dokumentacji i zostawiłem mi trochę drapania głowy. Jeśli chcesz dodać zmienne env i pozostawić platformę-agnostyczną, możesz zrobić kopię 'process.env', zastosować zmiany do tej i przekazać ją do' child_process.exec'. – DanielSmedegaardBuus

+1

Można również zaktualizować direclty 'process.env'. Przykład: 'process.env [" PATH "] + = ścieżka.delimiter + process.cwd() + ścieżka.sep +" node_modules "+ ścieżka.sep +" .bin "' – mems

Powiązane problemy