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

10

Когда я эхо $ 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 / path отличается от переменной $ PATH?

level0
источник
Какая версия OS X? У меня нет /etc/pathsв моем, но я бегу, 10.4.11и с тех пор, вероятно, все изменилось
Fox
1
Но согласно ответу на AskDifferent , /etc/pathsиспользуется для генерации значения по умолчанию $PATH, которое вы можете позже изменить
Fox
Это по умолчанию. К тому времени, когда пользователь запустит свою оболочку, она будет изменена другими файлами, которые содержат источники оболочки, например, ~/.bashrcили~/.profile
Сергей Колодяжный,

Ответы:

14

/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 следуют несколько иному процессу установки. Другие оболочки и вещи, которые не были запущены из оболочки вообще (например, задания cron), могут иметь совершенно другое значение $PATHs.

Гордон Дэвиссон
источник
Обратите внимание, что для не входящих в систему оболочек (например, /usr/local/bin/bashкак установлено brew, без -lаргумента), /usr/libexec/path_helperне используется и /usr/local/binне включается по умолчанию в $PATH. Чтобы использовать path_helperв сценарии или в интерактивном режиме, команда eval $(/usr/libexec/path_helper).
Кайл Стрэнд,
0

Первые места, на которые я хотел бы посмотреть, есть ли изменения,

~/.profile
~/.bashrc
~/.bash_profile

Если вы используете что-то, что не является Bash, проверьте файлы конфигурации, чтобы увидеть упоминания о PATH.

rovr138
источник