每次我尝试使用 npm 时都会收到上述错误。Python 在我的电脑上运行良好,但 npm 和 node 却无法运行。
您收到的错误消息表明可执行脚本有一个指定可执行文件( )/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环境的实用程序。
我建议在故障排除时至少暂时停用它- 注释掉rbenvshell 的配置文件/初始化文件中加载的行(在 Bash 中:~/.bash_profile或~/.bashrc- 请参阅https://github.com/sstephenson/rbenv#how-rbenv-hooks-into- your-shell),然后打开一个新的终端窗口。
最后,一些关于如何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" "$@"//因此节点稍后会忽略它(因为在 JavaScript 中,它是注释),因为该行的唯一目的是调用节点。//是尝试//作为命令运行,但它总是失败,因此2>/dev/null附加它以抑制错误消息。exec "`dirname "$0"`/node" "$0" "$@"然后有效地将手头脚本的调用中继到node可执行文件:
execsh用指定的命令替换正在运行的实例。"`dirname "$0"`/node"`将节点可执行文件指定为与npm 符号链接位于同一目录中(这是有道理的,因为 和node始终npm安装在同一目录中)。$0指的是脚本本身(npm符号链接)"$@"简单地传递所有传递给npmthrough 的参数。node用于执行脚本的可执行文件npm来自相同的Node.js 版本。如果#!/usr/bin/env node使用简单的 shebang,那么将使用首先node出现的任何可执行文件。$PATH| 归档时间: | 
 | 
| 查看次数: | 6649 次 | 
| 最近记录: |