/ bin / sh:1:node:找不到child_process.exec

时间:2016-07-23 14:38:43

标签: javascript node.js

我尝试使用内置的child_process模块运行nodejs脚本,它工作正常,直到我给它选项。特别是当我将env属性添加到选项对象时。

let exec = require('child_process').exec;

exec('node random.js', { env: {} }, (err) => {
  console.log(err);
})

然后我收到此错误:/bin/sh: 1: node: not found

我在nvm上安装了节点,也许这就是原因,但不知道为什么。

1 个答案:

答案 0 :(得分:1)

如果您从脚本执行一个新的shell,则它与父shell(您的脚本)的环境不同。

所以你必须提供所有需要的环境。

在你的情况下,我看到你可以做的两种方式。

首先:使用完整路径创建节点命令:

let exec = require('child_process').exec;

let node_cmd = '/path/to/my/node/node';

exec(node_cmd + ' random.js', { env: {} }, (err) => {
  console.log(err);
});

因此,您可以使用env变量来处理路径,或者只在需要时更改它。

其次,将path变量传递给命令:

let exec = require('child_process').exec;

let env_variables = 'PATH='+process.env.PATH;

let cmd = env_variables + ' node random.js';

exec(cmd, { env: {} }, (err) => {
  console.log(err);
});

另一种方法是使用dotenv包。

相关问题