
Когда я вывожу $PATH, я получаю следующее: Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-tools
.
Я хочу удалить некоторые пути из этого файла, но когда я открываю файл с помощью команды vim /etc/paths
, я получаю следующие результаты:
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
Отличается ли файл /etc/paths от переменной $PATH?
решение1
/etc/paths
является частью того, что используется для настройки $PATH
процессов оболочки. Когда вы открываете новое окно терминала, оно запускает bash
, который запускает несколько сценариев запуска: /etc/profile
И ~/.bash_profile
ИЛИ (если этого не существует) ~/.bash_login
ИЛИ (если этого тоже не существует) ~/.profile
. Эти сценарии настраивают среду оболочки, включая $PATH
.
Одна из вещей, /etc/profile
которую делает, это запуск /usr/libexec/path_helper
, который считывает /etc/paths
и любые файлы в /etc/paths.d
и добавляет их содержимое в $PATH
. Но это только отправная точка; ваш собственный сценарий запуска (если таковой имеется) может добавлять в $PATH
, редактировать его, полностью заменять и т. д.
Мне кажется, что ваш скрипт запуска (и/или то, что он запускает) добавляет несколько записей в базовый набор, который он получает из /etc/paths
. "Users/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:" добавляется в начало $PATH
(то есть эти каталоги будут просматриваться в первую очередь), а ":/Users/mac/Library/Android/sdk/platform-tools:/platform-tools" добавляется в конец. Если вы хотите точно знать, что их добавляет, вам нужно посмотреть на ваш скрипт запуска.
Кстати, этот процесс настройки $PATH
применим только к оболочкам bash "login". Все, что запускается оболочкой bash, будет наследоваться $PATH
от нее, так что, вероятно, по сути будет то же самое. Оболочки bash non-login следуют несколько иному процессу настройки. Другие оболочки и вещи, которые вообще не запускаются из оболочки (например, задания cron), могут иметь совершенно другой $PATHs
.
решение2
В первую очередь я бы проверил наличие изменений,
~/.profile
~/.bashrc
~/.bash_profile
Если вы используете что-то, кроме Bash, проверьте файлы конфигурации на предмет упоминания PATH.