2016-06-27 7 views
1

Ich schreibe ein Befehlszeilen-Dienstprogramm, und ich brauche stdout zu TTY schreiben oder {stdio: 'inherit'} Ich habe mit exec bekommen bekommen, aber es wird nicht schneiden. Ich brauche einen Spawn-Prozess, um die folgenden Echobefehle auszuführen. Ich weiß, dass spawn einen Child-Prozess mit einem gegebenen Befehl hochspielt, und Sie übergeben Argumente, aber ich brauche nur eine Zeile getrennte Befehle wie diese. Dies ist es, was ich gerade exec füttere. Ist das möglich?Run Block von Bash/Shell in Node's Spawn

const spawn = require('child_process').spawn 
const child = spawn(` 
echo "alpha" 
echo "beta" 
`) 

child.stdout.on('data', (data) => { 
    console.log(`stdout: ${data}`) 
}); 

child.stderr.on('data', (data) => { 
    console.log(`stderr: ${data}`) 
}); 

child.on('close', (code) => { 
    console.log(`child process exited with code ${code}`) 
}); 

Antwort

3

spawn() tut nicht eine Schale umfassen, so, um es Shell-Befehle ausführen zu haben, müssen Sie die Shell ausführbare explizit und übergeben Sie den Shell-Befehl (s) als Argument aufrufen:

const child = spawn('/bin/sh', [ '-c', ` 
echo "alpha" 
echo "beta" 
` ]) 

Hinweis ich habe /bin/sh verwendet anstatt /bin/bash in dem Bemühen, Ihren Befehl auf einer breiteren Palette von [Unix-artigen] Plattformen zu machen.
Alle wichtigen POSIX-artigen Shells akzeptieren eine Befehlszeichenfolge über die Option -c.

+1

Perfekt, das ist genau das, was ich brauchte, vielen Dank! – ThomasReggi