我正在尝试使用Node.js的spawn
命令。
我试图在Node.js中模拟下面的两个命令
rm -rf *
cp ../dir1/* ./
我的Node.js代码在下面
spawn('rm', ['-rf', '*'], {cwd: '...'});
spawn('cp', ['./dir1/*', './'], {cwd: '...'});
不起作用。虽然我没有任何错误。
我的问题是-我想念什么吗?还是出于安全原因被阻止?还是那里有任何解决方法?
输出:目录中的所有文件(由于ls
命令)。
编辑:
const PUBLIC_HTML_PATH = '....';
async function clearFBPublicFolder() {
return new Promise((resolve, reject) => {
const deleteCommand = spawn('rm', ['-rf', '*'], { cwd: PUBLIC_HTML_PATH });
console.log('Removing files from', PUBLIC_HTML_PATH);
deleteCommand.stdout.pipe(process.stdout);
deleteCommand.stderr.pipe(process.stdout);
deleteCommand.on('error', (err) => {
console.log(err);
reject(err);
});
deleteCommand.on('close', resolve);
deleteCommand.on('exit', function(code) {
console.log('Removing files: exit code (spawn)', code);
});
});
}
async function main() {
try {
await clearFBPublicFolder();
spawnSync('ls', { cwd: PUBLIC_HTML_PATH }).output.map((o) => console.log(o ? o.toString() : null));
} catch (error) {
console.log(error);
}
}
main();
一个解决方案,我可以找到编写外壳脚本的程序,然后将其作为节点子进程的一部分运行
答案 0 :(得分:0)
浪费2-3小时后,我的时间开始了。我发现如果将spawn
更改为exec
(从同一包-'child_process'导入),则可以正常工作。
例如:
exec('rm -rf *', {cwd: '...'});
exec('cp ./dir1/* ./', {cwd: '...'});
我仍然不知道为什么它不适用于spawn
。如果有人知道确切答案,请随时添加其他答案。