При попытке использовать child_process.spawn в node.js для запуска команды tar время выполнения завершается с ошибкой ENOENT
. Если я запускаю его как child_process.exe c, команда запускается и возвращает одну строку вывода через обработчик событий exec.stdout.on('data')
. При запуске команды в терминале она выводит больше, чем то, что возвращает exe c.
Ключевая проблема заключается в том, что с флагами -cvMf
tar пользователь должен нажать enter для продолжения своего процесса, который Я надеялся сделать через exec.send
Вот выдержка из кода, который я имею:
try {
let subprocess = exec('tar -cvMf /dev/nst0 /mnt/Data/2GBdata1 /mnt/Data/1GBdata');
subprocess.stdout.on('data', function (data) {
console.log('stdout on data: \n', data.toString());
});
subprocess.on('data', function(data) {
console.log('on data: \n', data);
})
subprocess.stdout.on('message', function (message) {
console.log('sub messgae: ', message);
});
subprocess.stderr.on('error', function(err) {
console.log('sub error thrown', err);
throw err;
})
subprocess.on('exit', function (data) {
subprocess = null;
console.log('sub exited: \n', data);
});
}
catch (err) {
console.error(`exec error: ${err}`);
output = `${err}`;
}
Вывод просто:
stdout on data:
/mnt/Data/2GBdata1
stdout on data:
/mnt/Data/1GBdata
Затем процесс просто висит. Ожидаемый результат (при запуске команды в терминале) следующий:
tar -cvMf /dev/nst0 /mnt/Data/2GBdata /mnt/Data/1GBdata
tar: Removing leading `/' from member names
/mnt/Data/2GBdata
/mnt/Data/1GBdata
Prepare volume #2 for ‘/dev/nst0’ and hit return:
Мой последний вариант - написать сценарий оболочки и использовать execFile, но я бы хотел избежать чрезмерно усложняющих вещей, если возможный. Любая помощь приветствуется, спасибо!