NodeJS子进程EXEC命令失败,NVM权限被拒绝OSX

时间:2017-05-01 20:15:07

标签: node.js child-process nvm

我试图在OSX上的Nodejs中的子进程中启动nvm 但是,这样做,我收到以下错误: / bin / sh:/Users/miker/.nvm/nvm.sh:权限被拒绝。子进程退出代码126(我调用nvm的显式路径,因为没有它运行,子进程无法看到可执行文件。)

很明显,这是一个许可问题。但是,我不确定为什么因为我可以自己启动命令而没有问题。只有在子进程中启动时才会失败。也许,子进程在另一个配置文件的上下文中运行?如果是这样,有没有办法维护当前的配置文件或上下文?

这是一个示例代码

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

let child = exec('echo $NVM_DIR && $NVM_DIR/nvm.sh use && npm install', {
    cwd: './build/'
});

child.stdout.on('data',
    (data) => {
        console.log(data);
    });

child.stderr.on('data',
   (data) => {
        //throw errors
        console.log(data);
    });

child.on('close', (code) => {
    console.log('child process exited with code ' + code);
});

我正在使用NodeJS 7.2.1和nvm 0.32.1 如果有人能解决这个问题,请告诉我。

1 个答案:

答案 0 :(得分:1)

~/.nvm/nvm.sh不是可执行脚本,它意味着“源”(不在单独的shell中运行,而是在当前shell上下文中加载和执行)。

尝试运行它就像它是可执行的一样会导致权限错误,因为它没有可执行权限。

我不知道它是否会起作用,但请尝试这样做:

echo $NVM_DIR && source $NVM_DIR/nvm.sh && nvm use VERSION && npm install

您可能必须为child_process.exec()显式设置shell选项,以确保命令行在“完整”shell中运行(如/bin/bash)。