Я пришел с использованием Cygwin на Windows, и я только начал использовать Mac. Мне интересно, почему кажется, что пути поиска работают не так, как должны.

Если у меня есть программа в /usr/bin/prog и я ее удаляю. Кажется, он продолжает пытаться использовать этот точный путь вместо того, чтобы искать его снова (скажем, я переместил его в /usr/local/bin).

Это связано с приложением терминала или это что-то особенное для Mac? Кроме того, если я хочу установить новую версию python в /usr/local/bin , правильно ли это сделать, чтобы удалить ее из /usr/bin/?

4 ответа4

3

Вы не говорите, какую оболочку вы используете, хотя ваш вопрос помечен как bash . Оболочкой Mac OS X по умолчанию является tcsh Если вы используете tcsh или csh, они кэшируют таблицу элементов вашего пути. Чтобы обновить таблицу, введите команду rehash в приглашении оболочки.

Это необходимо делать всякий раз, когда вы перемещаете или удаляете исполняемый файл или добавляете что-то в свой путь.

Если вы действительно используете оболочку bash то это не относится.

2

Терминал OS X будет пробовать пути, объявленные в переменной PATH, по порядку, пока не найдет его или не исчерпает места для проверки. Вы можете проверить, какая у вас переменная PATH, набрав в командной строке следующее:

echo $PATH

Вы можете запустить следующее из командной строки, чтобы увидеть, где ваша оболочка находит нужную программу:

which prog

Если вы хотите обновить Python, я рекомендую установить его в то же место, где он уже существует. Если вы хотите, чтобы на вашу машину одновременно было установлено более одной версии, то установка ее в /usr /local /bin была бы логичным выбором IMO.

0

Вместо того, чтобы использовать

which prog

Вы можете использовать встроенную Bash

type -P prog

# some examples using: type -P cmd
$(type -P prog) arg1 arg2 arg3 ...
myls=$(type -P ls) && $myls -l

Для получения дополнительной информации см.

help type

# The -P flag forces a PATH search for each NAME, even if it is an alias,
# builtin, or function, and returns the name of the disk file that would
# be executed.

Еще один вариант может быть попробовать

help command
command -p prog

НТН

0

Из того, что я понимаю, когда вы запускаете программу, она будет искать папки в переменной $ PATH, которая отделена символом ":", например.

/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin

Ваш $ PATH настроен правильно? Чтобы узнать это, используйте:

echo $PATH

Вы также можете использовать какой Python, чтобы найти, какая версия и где он работает. Я полагаю, что это также поиск слева направо, поэтому потребуется первая программа с именем python, найденная на пути.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .