В чем разница между «echo $PATH» и /etc/paths?

В чем разница между «echo $PATH» и /etc/paths?

Когда я вывожу $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.

Связанный контент