Назад | Перейти на главную страницу

Почему мой WHICH PHP имеет другое значение, чем WHEREIS PHP?

который показывает мою локальную установку php

и где php показывает глобальную установку php (общий env)

У этих двух программ разные представления о том, где искать. Они также могут быть реализованы по-разному в разных системах. По моему, whereis это двоичный исполняемый файл и which это сценарий оболочки Борна.

Если вам нужны другие мнения о том, где что-то находится, попробуйте следующее:

type -a php

и

locate php

Из whereis man страница:

whereis имеет жестко запрограммированный путь, поэтому не всегда может найти то, что вы ищете.

Из which man страница:

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

Так whereis ищет жестко запрограммированный путь, which использует переменную $ PATH, locate использует базу данных (по умолчанию) всей файловой системы, и type, который является встроенной функцией Bash, просматривает $ PATH, встроенные функции, псевдонимы и определения функций.

я использую type и locate в первую очередь и очень редко используют два других, поскольку их возможности относительно ограничены.

Ох, и чтобы ответить на ваш вопрос, which, поскольку он выполняет поиск $ PATH, с большей вероятностью покажет вам местоположение, которое действительно будет запускаться, если вы введете команду "php". И type вероятно, будет даже лучше в тех случаях, когда у вас есть псевдонимы или функции с одним и тем же именем, поскольку они выполняются предпочтительно над местоположением $ PATH. Обратите внимание, что все это зависит от системы, а также от оболочки, которую вы используете (я предполагаю, что это Bash). В моей системе, использующей Bash, порядок следующий: функции, псевдонимы, встроенные команды, затем $ PATH (в том порядке, в котором там перечислены каталоги). Сравните вывод этих различных команд с:

echo $PATH