Подтвердить что ты не робот

В bash, "which" указывает неверный путь - версии Python

Может ли кто-нибудь объяснить, как запустить python 2.6 по умолчанию на моей машине? Похоже, что python указывает на 2.7, поэтому кажется, что which не дает мне правильной информации.

~> python --version
Python 2.6.5
~> which python
/opt/local/bin/python
~> /opt/local/bin/python --version
Python 2.7.2
~> ls -l /opt/local/bin/python
lrwxr-xr-x  1 root  admin  24 12 Oct 16:02 /opt/local/bin/python -> /opt/local/bin/python2.7

Когда я генерирую ошибку, я вижу, что действительно запускается. Почему это может быть?

~> python -error-making-argument
Unknown option: -e
usage:     /Library/Frameworks/Python.framework/Versions/2.6/Resources/Python.app/Contents/MacOS/Python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Try `python -h' for more information.

И как я могу его исправить?

---- Редактирование: ----

Из предложений в комментариях:

~> alias
alias cp='cp -i'
alias gcc='gcc -Wall'
~> type python
python is /opt/local/bin/python
4b9b3361

Ответ 1

Bash использует внутреннюю хеш-таблицу для оптимизации поиска $PATH. Когда вы устанавливаете новую программу с тем же именем, что и существующая программа (python в этом случае) ранее в $PATH, Bash не знает об этом и продолжает использовать старую. Исполняемый which выполняет полный поиск $PATH и распечатывает предполагаемый результат.

Чтобы исправить это, запустите команду hash -d python. Это удалит python из хэш-таблицы Bash и заставит ее выполнить полный поиск $PATH при следующем вызове. Кроме того, вы также можете запустить hash -r, чтобы полностью очистить таблицу хэшей.

type builtin расскажет вам, как интерпретируется данная команда. Если он говорит, что команда хеширована, это означает, что Bash собирается пропустить поиск $PATH для исполняемого файла.

Ответ 2

Я только что проверил свой .bash_profile, и он содержал следующее:

# Setting PATH for MacPython 2.6
# The orginal version is saved in .bash_profile.pysave
PATH="/Library/Frameworks/Python.framework/Versions/2.6/bin:/usr/local/git/bin:${PATH}"
export PATH

Комментируя это, я исправил свою проблему.

Если кто-нибудь скажет мне, почему which и type все еще дали неправильные ответы, я был бы очень благодарен и дам им контрольный знак!

Спасибо за все ваши рекомендации!