Вопрос или проблема
В zsh, если я ввожу echo $PATH
, вывод будет следующим
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/Library/TeX/texbin
У меня нет ни одного из этих путей в моих файлах .zshrc
, .zprofile
или .zshenv
. Откуда они берутся? И вторая, необязательная часть вопроса: как удалить один из них из $PATH?
Ответ или решение
Вопрос об источниках значений переменной окружения $PATH в zsh представляет собой интересную задачу, поскольку понимание того, откуда берутся пути, может быть полезно для управления и настройки среды командной оболочки. Разберемся подробно, как zsh устанавливает значения для переменной $PATH и откуда именно берутся пути, упомянутые в выводе. Также рассмотрим, как можно удалить или изменить эти пути в $PATH.
Теория
Переменная окружения $PATH в операционных системах UNIX и UNIX-подобных, таких как macOS, Linux и других подобных, играет ключевую роль в определении того, где командная оболочка должна искать исполняемые файлы. Когда вы вводите команду в терминале, оболочка проверяет каждый из путей, указанных в $PATH, в поисках исполняемых файлов, соответствующих введенной команде.
В большинстве случаев значения $PATH устанавливаются и/или модифицируются в одном из файлов настройки командной оболочки. В случае zsh это могут быть файлы, такие как .zshrc
, .zprofile
, .zshenv
или .zlogin
. Тем не менее, если в этих файлах явно не указано изменение $PATH, это означает, что значения могут быть установлены системой или дефолтными конфигурациями.
Примеры
В вашем случае, как вы указали, ни один из путей не указан в ваших файлах .zshrc
, .zprofile
или .zshenv
. Это может происходить по нескольким причинам:
-
Системные конфигурации: В macOS многие из дефолтных путей могут быть добавлены системной конфигурацией. Например, пути, такие как
/usr/bin
,/bin
,/usr/sbin
, и/sbin
, чаще всего являются частью системной конфигурации, прописанной в/etc/paths
и в файлах внутри директории/etc/paths.d/
. -
Пакетные менеджеры: Некоторые пути, такие как
/opt/homebrew/bin
и/opt/homebrew/sbin
, вероятно были добавлены благодаря установке Homebrew, популярного пакетного менеджера для macOS. Homebrew обычно автоматически добавляет свои пути к $PATH, чтобы обеспечить доступ к установленным утилитам и пакетам. -
Криптосистемы Apple: Пути, связанные с
/System/Cryptexes
и/var/run/com.apple.security.cryptexd
, вероятно связаны с внутренними механизмами безопасности и работы системы, такими как Cryptex и другие технологические слои безопасности Apple.
Применение
Теперь о том, как изменить или удалить путь из $PATH. У вас есть несколько вариантов:
-
Локальная сессия: Если вы хотите временно удалить путь из $PATH для текущей сессии терминала, вы можете использовать команду
export
для переопределения $PATH:export PATH=$(echo $PATH | sed -e 's|/path/to/remove:||g')
-
Постоянные изменения: Чтобы внести постоянные изменения, вам нужно изменить ваш файл конфигурации для zsh. Например, в
.zshrc
можно добавить следующие строки:export PATH=$(echo $PATH | sed -e 's|/path/to/remove:||g')
-
Системные настройки: Если нужно удалить путь, который добавляется системными конфигурациями, вы можете рассмотреть вариант редактирования файлов внутри
/etc/paths
и/etc/paths.d/
, но с осторожностью, так как они могут затронуть другие системные процессы.
С учетом всех указанных выше нюансов, понимание и администрирование $PATH — это важная часть обеспечения правильной работы вашей командной оболочки zsh и всей системы в целом. Обеспечивать правильные пути в $PATH — значит не только улучшить функциональность командной строки, но и гарантировать оптимальную производительность и безопасность вашей системы.