cpan / perl 搞砸了

cpan / perl 搞砸了

Lubuntu Xenial。我似乎弄乱了我的系统 perl。cpan 返回:

bash: /usr/local/bin/cpan: no such file or directory

(我从该目录中的源代码构建了一个较新的 perl 版本,但又将其删除了)。

apt-get install perl --reinstall

似乎做了正确的事情,但没有解决问题。我不敢先清除 perl 并重新安装它,因为 apt 可能依赖它。

我能做些什么?

答案1

TL;DR:运行hash -r或仅启动一个新 shell 通常可以解决此问题。

如果该文件确实消失了,那么 shell 很可能仍然对其进行了哈希处理。

首先我建议你确认它/usr/local/bin/cpan确实消失了:

ls -l /usr/local/bin/cpan

如果那里有东西,则说明您没有完全卸载。如果那里什么都没有,那么您将收到以下消息:

ls: cannot access '/usr/local/bin/cpan': No such file or directory

假设你收到了这条消息,但在你输入并按下时bash试图运行,问题很可能是/usr/local/bin/cpancpanEnterbash仍有那条路哈希。shell 通常会散列其位置,而不是每次都查找外部命令的位置。因此,您可以通过以下方式解决问题:告诉bash“重新讨论”,通过运行:

hash -r

或者直接启动一个新 shell。

如果这不起作用,请检查它是否是别名或 shell 函数。

如果文件不再存在,哈希值也不再变化,则很可能cpan是一个充当包装器的别名或 shell 函数/usr/local/bin/cpan。要确定这一点,请运行:

type -a cpan

如果它是别名或 shell 函数,则会显示定义。然后,unalias cpan如果它是别名或unset -f cpanshell 函数,您可以使用取消设置它。

您最终将希望从包含该定义的启动脚本中删除该定义。通常它将位于.bashrc您的主目录中的文件中。别名有时在 中定义。(有时人们在、或.bash_aliases中定义别名和 shell 函数,尽管这不是一个很好的做法。).profile.bash_profile.bash_login

如果这不起作用,请考虑您正在如何运行cpan或处于什么 shell 中。

如果文件不见了,仍然没有散列,不是别名或 shell 函数,并且type -a没有揭示问题,那么很可能您 (a) 没有cpan直接通过该命令运行,或者 (b) 使用了除 之外的 shell bash。在前一种情况下,没有进一步的详细信息就无法回答。

后一种情况似乎不太可能,因为你的 shell调用自己 bash,尽管偶尔有人会不明智地创建一个指向bash非 shell 的符号链接(这是不明智的)。事实是,我主要是为了其他读者的利益而提到这一点。根据该消息,您几乎肯定会使用bash

但是,如果你没有或者可能没有,请运行echo "$BASH_VERSION"以查看你是否正在运行bash- 这应该在其他 shell 中取消设置 - 并echo "$SHELL"查看你的默认shell 是。重新哈希的工作方式不同——或者至少是已实现在其他 shell 中则不同。

其他一些 Bourne 风格的 shell,喜欢zsh,有一个rehash命令,你会运行而不是hash -r。这也是你如何导致重新哈希发生cshtcsh

相关内容