【问题标题】:NodeJS Child Process EXEC Command Failed with NVM Permission denied OSXNodeJS子进程执行命令失败,NVM权限被拒绝OSX
【发布时间】:2017-09-29 06:25:50
【问题描述】:

我正在尝试在 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 如果有人有解决这个问题的方法,请告诉我。

【问题讨论】:

    标签: node.js child-process nvm


    【解决方案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)。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,但它与代码无关,而是与我使用的 IDE 终端有关。

      解决办法是在IDE设置里改目录,改了就解决了。

      就我而言,我使用的是 Jetbrains Phpstorm。

      【讨论】:

        猜你喜欢
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        • 2018-07-03
        • 1970-01-01
        • 2017-02-21
        • 1970-01-01
        • 2021-05-18
        • 1970-01-01
        相关资源
        最近更新 更多