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
,