comment puis-je créer un noeud child_process exec en continu

Comment exec continu? Par exemple, après cd ?

j’ai essayé

 exec = require('child_process').exec; exec('cd ~/', function(){ exec('ls'), function(err, stdout, stderr){ console.log(stdout); // this logs current dir but not ~/'s } } ) exec('cd ~/').exec('ls', function(err, stdout, stderr){ console.log(stdout); })//this also fails because first exec returns a ChildProcess Object but not itself. 

Cela n’est pas possible car exec et spawn créent un nouveau processus. Mais il existe un moyen de simuler cela. Vous pouvez démarrer un processus avec exec et exécuter plusieurs commandes en même temps: Dans la ligne de commande, vous pouvez écrire 3 commandes sur la même ligne:

 cmd1 & cmd2 & cmd3 

Ainsi, les 3 commandes s’exécutent dans le même processus et ont access au contexte modifié par les commandes exécutées précédemment. Prenons votre exemple, vous voulez exécuter cd ../, puis exécuter dir et afficher la liste de répertoires précédente. Dans cmd, vous devez écrire:

 cd../ & dir 

Depuis le noeud js, vous pouvez démarrer un processus avec exec et lui dire de démarrer une autre instance de noeud qui évaluera un script en ligne:

 var exec = require('child_process').exec; var script = "var exec = require('child_process').exec;exec('dir',function(e,d,er){console.log(d);});"; script = '"'+script+'"';//enclose the inline script with "" because it contains spaces var cmd2 = 'node -e '+script; var cd = exec('cd ../ &'+cmd2,function(err,stdout,strerr) { console.log(stdout);//this would work }) 

Si vous voulez seulement changer le répertoire actuel, vous devriez vérifier la documentation à ce sujet http://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

Si vous voulez utiliser cd premier, utilisez mieux process.chdir('~/') . Ensuite, un simple exec() fera le travail.

Vous pouvez appeler exec avec cwd param comme suit:

 exec('ls -a', { cwd: '/Users/user' }, (err, stdout) => { if (err) { console.log(err); } else { console.log(stdout); } }) 

Mais attention, cwd ne comprend pas ‘~’. Vous pouvez utiliser process.env.HOME à la place.