2017-05-01 4 views
0

OSX의 노드 j에서 하위 프로세스 내에서 nvm을 시작하려고 시도하는 중 그러나 다음과 같은 오류가 발생합니다. /bin/sh :/Users/miker/.nvm/nvm.sh : 사용 권한이 거부되었습니다. 자식 프로세스는 코드 126 (없이 실행하기 때문에, 자식 프로세스가 실행 파일을 볼 수없는 내가, NVM에 명시 적 경로를 호출합니다.)NodeJS 자식 프로세스 EXEC 명령이 NVM 권한으로 거부 됨 OSX

이이 권한 문제입니다 분명하다로 종료. 그러나, 나는 왜 거기에 문제없이 자신의 명령을 시작할 수있는 이유는 모르겠다. 그것은 자식 프로세스에서 실행이 실패 할 때만입니다. 아마도 자식 프로세스가 다른 프로필의 컨텍스트에서 실행됩니까? 그렇다면 현재 프로필이나 컨텍스트를 유지할 수있는 방법이 있습니까? 여기

는 예제 코드

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); 
}); 

이다 나는 사람이 문제에 대한 해결책이있는 경우 0.32.1이 알려 주시기 바랍니다 NodeJS 7.2.1 및 NVM을 사용하고 있습니다.

답변

1

~/.nvm/nvm.sh은 "원본"(별도의 셸에서는 실행되지 않지만 현재 셸 컨텍스트에서로드되고 실행 됨)이어야합니다.

실행할 수있는 것처럼 실행하려고하면 실행 권한이 없으므로 사용 권한 오류가 발생합니다.

내가이 일 것 알고, 대신이 시도하지 않는 :

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

명시 적으로 "명령 줄이 실행되어 있는지 확인하는 child_process.exec()에 대한 shell 옵션을 설정 할 수 있습니다 전체 "쉘 (예 : /bin/bash).

+0

네, 그게 전부입니다. nvm 스크립트를 소싱하면됩니다. 감사. – thxmike