【问题标题】:How do I include this directory in the $PATH env var?如何将此目录包含在 $PATH 环境变量中?
【发布时间】:2014-04-21 15:08:34
【问题描述】:

我正在为Github's Atom 编辑器构建一个包,我遇到了一个挑战,试图让一个子进程使用节点 js 执行。我很确定问题在于 Atom 运行的环境不包含 mrt 脚本的路径。所以当我从我的包中运行它时:

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 内置了一个网络检查器,您实际上可以看到 atom 包含的路径。因此,当我转到 Atom 的控制台并输入:process.env.PATH 时,它会显示路径:/usr/bin:/bin:/usr/sbin:/sbin。所以我需要让 atom 知道那个 mrt 脚本的路径。有谁知道我该怎么做?

我昨天也联系了Atom's discussion forum,但尚未提出解决方案。

编辑:

我还应该注意,执行 mrt 包安装程序的正常命令是 mrt add package-name,但正如 Atom's discussion forum 所建议的那样,我一直在使用完整路径。

编辑 2:

我已经在我的/usr/bin 目录中创建了指向节点的符号链接,现在它正在工作。现在我正在尝试让节点使用 fs.symlink 为我创建符号链接,但这似乎不起作用。

【问题讨论】:

  • 尝试执行which mrt会得到什么结果?
  • @Phoenix 我得到了:/usr/local/bin/mrt

标签: node.js path environment-variables


【解决方案1】:

总而言之,问题在于 Atom 从它启动的地方使用 PATH。因此,节点的路径和 mrt 的路径不包含在 Atom 的路径中。当 Atom 讨论论坛上有人指出 Atom 的 Class BufferedNodeProcess 时,我找到了解决方案。 在回答时,该类有一个小错误,所以我无法使用它 - Github 团队工作得很快,如果它在接下来的几天内得到修复,我不会感到惊讶。然而,我能够使用一些代码来获得 Atom 的环境。此外,我最终使用node's spawn method 而不是执行,因为这是 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

【讨论】:

    猜你喜欢
    • 2019-05-15
    • 1970-01-01
    • 2014-01-20
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多