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 или просто запуск новой оболочки обычно решает эту проблему.

Если файл на самом деле пропал, то, вероятно, оболочка все еще имеет его хэшированный.

Сначала я предлагаю вам убедиться, что /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/cpan когда вы печатаете cpan и нажмите Enter, проблема, скорее всего, в том, что bash все еще этот путь хешируется. Вместо того, чтобы искать, где находятся внешние команды каждый раз, оболочки обычно хешируют свои местоположения. Таким образом, вы можете решить проблему, сказав bash "перефразировать", запустив:

hash -r

Или просто запустите новую оболочку.

Если это не сработает, проверьте, является ли это псевдонимом или функцией оболочки.

Если файл не присутствует и не хэширован, то скорее всего cpan это псевдоним или функция оболочки, которая действует как оболочка для /usr/local/bin/cpan, Чтобы убедиться в этом, запустите:

type -a cpan

Если это псевдоним или функция оболочки, это покажет определение. Тогда вы можете сбросить его с unalias cpan если это псевдоним, или unset -f cpan если это функция оболочки

В конечном итоге вы захотите удалить определение из любого сценария запуска, в котором оно содержится. Обычно это будет в .bashrc файл в вашем домашнем каталоге. Псевдонимы иногда определяются в .bash_aliases, (Иногда люди определяют псевдонимы и функции оболочки в .profile, .bash_profile, или же .bash_login хотя это не очень хорошая практика.)

Если это не сработает, подумайте, как вы бежите cpan или в какой вы оболочке.

Если файл пропал, не все еще хешируется, не псевдоним или функция оболочки, и type -a не раскрывает проблему, то, скорее всего, вы либо (а) не работает cpan непосредственно с помощью этой команды, или (b) используя оболочку, отличную от bash, В первом случае невозможно ответить без подробностей.

Последний случай кажется маловероятным, поскольку ваша оболочка вызывает себя bash хотя время от времени кто-то опрометчиво делает символическую ссылку bash в оболочку, которая не (что не рекомендуется). Правда, я в основном упоминаю это в пользу других читателей. Исходя из этого сообщения, вы почти наверняка используете bash,

Тем не менее, в случае, если вы не или не можете, запустить echo "$BASH_VERSION" чтобы увидеть, бежишь ли ты bash - это должно быть сброшено в других оболочках - и echo "$SHELL" чтобы увидеть, какая у вас оболочка по умолчанию. Перефразировка работает по-другому - или, по крайней мере, достигается по- другому - в других оболочках.

Некоторые другие ракушки в стиле Борна, такие как zsh есть rehash Команда, которую вы будете запускать вместо hash -r, Это также, как вы могли бы вызвать перефразировку в csh а также tcsh,

Другие вопросы по тегам