2011-11-05 16 views
11

Sto cercando di eseguire un comando nel nodo:Come exec in NodeJS utilizzando l'ambiente dell'utente?

cd "/www/foo/" && "/path/to/git/bin/git.exe" config --list --global 

Fondamentalmente, voglio eseguire un comando Git che restituisce configurazione globale (per l'utente corrente).

Questo funziona bene per me, quando eseguo il comando direttamente sul cli. Funziona anche se lo faccio come questo in nodo:

var exec = require('child_process').exec; 

var config = { 
    maxBuffer: 10000 * 1024 
}; 

exec('cd "/www/foo/" && "/path/to/git/bin/git.exe" config --list --global', config, function() { 
    console.log(arguments); 
}); 

Tuttavia, non appena ho specificare l'ambiente per la configurazione:

var exec = require('child_process').exec; 

var config = { 
    maxBuffer: 10000 * 1024, 
    env: { // <--- this one 
    } 
}; 

exec('cd "/www/foo/" && "/path/to/git/bin/git.exe" config --list --global', config, function() { 
    console.log(arguments); 
}); 

cose pausa:

Comando non riuscito : fatale: impossibile leggere il file di configurazione '(null)/(null) /. gitconfig': Nessun file o directory

so il motivo, è perché il programma Git eseguito non viene più eseguita in ambiente utente (come è in CLI), e non può recuperare la directory all'utente di leggere configurazione globale (in Git, configurazione globale = user config) e credo /(null)/(null)/.gitconfig dovrebbe essere /Users/MyName/.gitconfig che non esiste.

La mia domanda è, come posso specificare l'ambiente dell'utente attuale pur essendo in grado di specificare le mie proprietà di ambiente aggiuntive?

risposta

14

ho risolto.

ho recuperato il contesto attuale da process.env ed esteso con le mie proprietà:

var environment = process.env; 
environment.customProp = 'foo'; 

var config = { 
    maxBuffer: 10000 * 1024, 
    env: environment 
}; 

Quindi il problema è stato ho perso l'intero ambiente quando ho sovrascritto esso.