Lubuntu Xenial. Я, кажется, испортил мой системный Perl. cpan возвращает:
bash: /usr/local/bin/cpan: no such file or directory
(я собрал более новую версию Perl из исходного кода в этом каталоге, но удалил ее снова).
apt-get install perl --reinstall
, казалось, поступил правильно, но не решил проблему. Я не смею сначала очистить Perl и переустановить его, так как apt может зависеть от него.
Что я могу сделать?
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
и нажимаете Введите kbd>, скорее всего, проблема в том, что 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
.