【问题标题】:-bash: /usr/local/bin/rbenv: /usr/bin/env: bad interpreter: Permission denied shows up everytime I try to use npm-bash: /usr/local/bin/rbenv: /usr/bin/env: bad interpreter: Permission denied 每次我尝试使用 npm 时都会出现
【发布时间】:2015-06-18 01:29:42
【问题描述】:

每次我尝试使用 npm 时都会出现上述错误。 Python 在我的电脑上运行良好,但 npm 和 node 无法运行。

【问题讨论】:

  • 这和python有什么关系?
  • 它可能没有,但我已经尝试了我所知道的一切并且无法解决问题,所以我不确定它与它有什么关系
  • 所以你在 bash 中输入 npm 并得到那个错误?
  • 你应该试试superuser.com;一件奇怪的事情是您的错误消息提到了rbenv,它用于管理多个 Ruby 版本。
  • 是的,当我输入 npm 这是吐出的错误

标签: node.js npm env


【解决方案1】:

您收到的错误消息表明可执行脚本/usr/local/bin/rbenv 有一个shebang 行指定可执行/usr/bin/env (#!/usr/bin/env ...)。

它说 Permission denied 的事实意味着,出于某种原因,/usr/bin/env 不可执行,或者至少 您不可执行。

这是非常不寻常的,因为/usr/bin/env 是一个常用的标准实用程序。我会在那里开始调查,例如通过运行 ls -l /usr/bin/env 来查看权限。

更广泛地说,问题是为什么 rbenv - 一个用于管理多个 Ruby 环境的实用程序 - 会在此处涉及

建议在故障排除时至少暂时停用它 - 注释掉在 shell 的配置文件/初始化文件中加载 rbenv 的行(在 Bash 中:~/.bash_profile~/.bashrc - 请参阅 @ 987654322@),然后打开一个新的终端窗口。

最后,关于npm 如何正常在 Unix 系统上启动的一些背景信息:

  • npm 是位于 $PATH 中的符号链接,它指向名为 npm-cli.js 的可执行脚本。
  • npm-cli.js 尽管包含 JavaScript,但实际上使用 #!/bin/sh 作为其 shebang 行,这意味着 shell (sh) 最初 执行该文件。
  • npm-cli.js 中的第二行实际上是sh 执行的唯一 行:
    • // 2>/dev/null; exec "`dirname "$0"`/node" "$0" "$@"
    • 该行以// 开头,因此 node 稍后会忽略它(因为在 JavaScript 中,它是一个 comment),因为该行的唯一目的是调用节点
    • shell 的角度来看,// 试图将 // 作为 命令 运行,但总是失败,因此将 2>/dev/null 附加到禁止显示错误消息。
    • exec "`dirname "$0"`/node" "$0" "$@" 然后有效地将手头脚本的调用传递给 node 可执行文件:
      • exec 用指定的命令替换正在运行的 sh 实例。
      • "`dirname "$0"`/node"` 指定 node 可执行文件与 npm symlink 位于同一目录中(这是有道理的,因为 nodenpm 都是始终安装在同一目录中)。
      • $0 指的是脚本本身(npm 符号链接)
      • "$@" 只是将传递给 npm 的所有参数传递给通过。
  • 我的猜测是,这种间接调用的原因是确保用于执行npm 脚本的node 可执行文件来自相同 Node.js 版本。如果使用了简单的#!/usr/bin/env node shebang,那么将使用$PATHfirst 出现的任何node 可执行文件。

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 2016-02-12
    • 2018-12-24
    • 1970-01-01
    • 2012-12-06
    • 2014-12-17
    • 1970-01-01
    • 2021-10-19
    • 2013-04-22
    相关资源
    最近更新 更多