cpan / perl испортил

Lubuntu Xenial. Я, кажется, испортил мой системный Perl. cpan возвращает:

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

(я собрал более новую версию Perl из исходного кода в этом каталоге, но удалил ее снова).

apt-get install perl --reinstall

, казалось, поступил правильно, но не решил проблему. Я не смею сначала очистить Perl и переустановить его, так как apt может зависеть от него.

Что я могу сделать?

2
задан 23 November 2017 в 15:22

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 и нажимаете Введите , скорее всего, проблема в том, что 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 .

0
ответ дан 23 November 2017 в 15:22

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

Похожие вопросы: