我有以下代码:
const cp = require('child_process');
function spawnInstance () {
const c = cp.spawn('bash');
return command => {
return new Promise((resolve, reject) => {
c.stdout.on('data', d => resolve(String(d || 'empty stdout.\n')));
c.stderr.once('data', d => reject(String(d || 'empty stderr.\n')));
c.stdin.write(`echo "${command}" | bash;`);
c.stdin.write('\n');
});
};
}
(async () => {
const bash = spawnInstance();
console.log(await bash('ls'));
console.log(await bash('cd node_modules'));
console.log(await bash('ls'));
})()
.catch(e =>
console.error(e)
);
我想要做的是重用相同的 bash 进程,并获取我运行的每个命令的标准输出。有没有办法做到这一点,或者我需要为我运行的每个命令启动一个新的 bash 进程?
问题是我的代码卡在 cd node_modules
命令上。
最佳答案
我不认为你可以在 bash 调用之后保持 bash 进程处于事件状态,然后通过一些新的调用重新进入该进程。但是,您可以在同一进程中依次运行多个 bash 命令,例如用分号分隔它们:
console.log(await bash('cd node_modules; ls'));
关于node.js - 向同一个 bash 进程发送多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49499732/