如何在$ PATH env var中包含这个目录?

我正在为Github的Atom编辑器构build一个包,并且正在尝试让一个subprocess执行js节点。 我很确定,问题在于Atom运行的环境不包括mrt脚本的path。 所以当我从我的包中运行这个:

exec = require("child_process").exec child = undefined child = exec("/usr/local/bin/mrt add iron-router", { cwd: path },(error, stdout, stderr) - console.log "stdout: " + stdout console.log "stderr: " + stderr console.log "exec error: " + error if error isnt null return ) 

在控制台中,我得到:

在这里输入图像描述

Atom有一个内置的Web检查器,你可以看到primefaces已经包含的path。 所以当我进入Atom的控制台并键入: process.env.PATH它显示path: /usr/bin:/bin:/usr/sbin:/sbin 。 所以我需要让primefaces知道那个mrt脚本的path。 任何人都知道我会怎么做呢?

我昨天也在Atom的讨论论坛上伸出援手,但还没有find解决办法。

编辑:

我还应该注意,正常命令mrt包安装程序是mrt add package-name但在Atom的讨论论坛上 ,我一直在使用完整的path。

编辑2:

我在我的/usr/bin目录中创build了符号链接到节点,现在它正在工作。 现在我试图让节点为我使用fs.symlink创build符号链接,但似乎并没有工作。

总而言之,问题是Atom从启动的地方使用PATH。 因此,节点的path以及未包括在Atompath中的mrt的path。 当Atom讨论区的某个人指出Atom的类BufferedNodeProcess时,解决scheme就来了。 在回答的时候,这个class有一个小小的错误,所以我没有办法使用它 – Github团队工作的很快,如果在接下来的几天内修好了,我不会感到惊讶。 但是,我可以使用一些代码来获取Atom的环境。 此外,我最终使用节点的spawn方法而不是执行,因为这是什么BufferedNodeProcess使用。 另外你可以阅读标准输出的每一行。

 options = cwd: atom.project.getPath() options.env = Object.create(process.env) unless options.env? options.env["ATOM_SHELL_INTERNAL_RUN_AS_NODE"] = 1 node = (if process.platform is "darwin" then path.resolve(process.resourcesPath, "..", "Frameworks", "Atom Helper.app", "Contents", "MacOS", "Atom Helper") else process.execPath) mrt = spawn(node, [ "/usr/local/lib/node_modules/meteorite/bin/mrt.js" "add" "iron-router" ], options ) mrt.stdout.on "data", (data) -> console.log "stdout: " + data return mrt.stderr.on "data", (data) -> console.log "stderr: " + data return mrt.on "close", (code) -> console.log "child process exited with code " + code return