javascript - Node.js通过spawn()调用bash脚本: ENOENT

标签 javascript node.js exec child-process spawn

这将引发 ENOENT 错误:

const cmd = 'bash my/path/to/script.sh';
const process = spawn(cmd);
process.on('exit', (code) => {
    console.log("Child exited");
});

虽然这不会并按预期执行脚本:

const cmd = 'bash my/path/to/script.sh';
exec(cmd, function(err, stdout, stderr) {
    console.log(stdout);
});

现在,我希望从 spawn() 获取数据流并使其正常工作。有什么建议可以说明这种行为可能来自哪里吗?

我检查了pwd,两者的当前工作目录是相同的。

最佳答案

看起来问题是 exec 将单个命令参数作为字符串,参数之间用空格分隔,但对于 spawn,您需要提供命令 (bash),然后将参数作为数组提供:

https://nodejs.org/api/child_process.html#child_process_child_process_exec_command_options_callback

https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

试试这个:

const process = spawn('bash', ['my/path/to/script.sh']);
process.on('exit', (code) => {
    console.log("Child exited");
});

关于javascript - Node.js通过spawn()调用bash脚本: ENOENT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52729240/

相关文章:

javascript - 运行 Puppeteer 时出现 UnhandledPromiseRejectionWarning?

c - 获取与 execle 一起使用的 shell 环境

php - 即使我重定向到另一个 URL,我也需要保持 PHP 进程在后台运行

javascript - 尝试使用 Angular rootScope 跨 Controller 持久保存数据,但总是未定义

javascript - 当数字有前导零时会发生什么?

json - sequelize.query() 两次返回相同的结果

php - Windows 上 PHP 中的异步 popen exec

javascript - 使用 Google Earth API 查找景观结构

javascript - 当只有父 ID 时,将普通数组转换为嵌套数组

javascript - node busboy + express 4 + ng-file-upload 不触发事件