2017-05-01 18 views
0

OSXのノードj内の子プロセス内でnvmを起動しようとしていますが、その際に次のエラーが発生しています: /bin/sh:/ Users/miker/.nvm/nvm.sh:許可が拒否されました。子プロセスはコード126で終了しました(nvmへの明示的なパスは、実行しないと実行されないので、子プロセスは実行可能ファイルを見ることができません)。NodeJSチャイルドプロセスEXECコマンドで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

~/.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

関連する問題