每当我尝试使用npm时,我都会收到上述错误。 Python在我的计算机上工作正常,但是npm和节点永远不会工作。
答案 0 :(得分:3)
您收到的错误消息表明可执行文件/usr/local/bin/rbenv
有一个指定可执行文件/usr/bin/env
(#!/usr/bin/env ...
)的shebang行。
事实上, Permission denied
表示由于某种原因,/usr/bin/env
不可执行 ,或者至少不是你可以执行。
非常不寻常,因为/usr/bin/env
是常用的标准实用程序。我会开始在那里进行调查,例如通过运行ls -l /usr/bin/env
来查看权限。
更广泛地说,问题是为什么rbenv
- 一个用于管理多个 Ruby 环境的实用程序 - 在这里全部涉及。
我建议在排除故障时至少暂时停用 - 注释掉在shell的配置文件/初始化文件中加载rbenv
的行(在Bash中:~/.bash_profile
或{{ 1}} - 见https://github.com/sstephenson/rbenv#how-rbenv-hooks-into-your-shell),然后打开一个新的终端窗口。
最后,在Unix系统上有一些关于~/.bashrc
正常启动的背景信息:
npm
是位于npm
中的符号链接,指向名为$PATH
的可执行脚本。npm-cli.js
,尽管包含JavaScript,但实际上使用npm-cli.js
作为其shebang行,这意味着 shell (#!/bin/sh
)最初执行文件。sh
中的第二行实际上是npm-cli.js
执行的唯一行:
sh
// 2>/dev/null; exec "`dirname "$0"`/node" "$0" "$@"
开头,以便节点稍后忽略它(因为,在JavaScript中,它是注释),因为该行的唯一目的是调用节点。//
是尝试将//
作为命令运行,它总是失败,所以{{附加1}}以抑制错误消息。//
然后有效地将手头脚本的调用转发给2>/dev/null
可执行文件:
exec "`dirname "$0"`/node" "$0" "$@"
使用指定的命令替换正在运行的node
实例。exec
将 node 可执行文件指定为与sh
符号链接位于同一目录中(这是有道理的,因为{ {1}}和"`dirname "$0"`/node"`
始终安装在同一目录中。)npm
指的是脚本本身(node
符号链接)npm
只传递传递给$0
的所有参数。npm
脚本的"$@"
可执行文件来自相同的 Node.js版。如果使用了简单的npm
shebang,那么node
中的npm
可执行文件首先将会被使用。