2016-06-27 3 views
1

Я пишу утилиту командной строки, и мне нужно написать stdout для записи в TTY или использовать {stdio: 'inherit'}. Я получаю от exec, но это не собирается сокращать его. Мне нужно, чтобы процесс spawn выполнял следующие команды эха ниже. Я знаю, что икру порождает дочерний процесс с заданной командой, и вы передаете аргументы, но мне нужно, чтобы он просто использовал строку команд, подобную строке. Это то, что я сейчас кормлю. Это возможно?Запустить блок bash/shell в нересте узла

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}`) 
}); 

ответ

3

spawn() делает не включать оболочку, поэтому для того, чтобы он выполнять команды оболочки, вы должны вызвать оболочки исполняемый явно и передать команду (ы) оболочки в качестве аргумента:

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

Примечание Я использовал /bin/sh, а не /bin/bash в попытке сделать вашу команду работать на более широкий спектр [Unix-подобных платформах].
Все основные POSIX-подобные оболочки принимают командную строку через опцию -c.

+1

Отлично, это именно то, что мне нужно, спасибо огромное! – ThomasReggi