Почему переменная $PATH различается в двух каталогах?

Почему переменная $PATH различается в двух каталогах?

Когда я нахожусь в одном каталоге и вывожу путь

pwd
/Users/me/src/some_proj

echo $PATH
/Users/me/.gem/ruby/2.0.0/bin:/opt/boxen/chruby/versions/2.0.0-
p353/lib/ruby/gems/2.0.0/bin:/opt/boxen/chruby/versions/2.0.0-
p353/bin:bin:/opt/boxen/chruby/bin:/opt/boxen/ruby-
build/bin:node_modules/.bin:/opt/boxen/nodenv/shims:/opt/boxen/nodenv/bin:
/opt/boxen/bin:/opt/boxen/homebrew/bin:/opt/boxen/homebrew/sbin:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

Когда я нахожусь в другом каталоге и эхо-пути

pwd
/Users/me/src_personal/my_gems/som_gem

echo $PATH
bin:/opt/boxen/chruby/bin:/opt/boxen/ruby-build/bin:
node_modules/.bin:/opt/boxen/nodenv/shims:/opt/boxen/nodenv/bin:
/opt/boxen/bin:/opt/boxen/homebrew/bin:/opt/boxen/homebrew/sbin:
bin:/opt/boxen/chruby/bin:/opt/boxen/ruby-build/bin:
node_modules/.bin:/opt/boxen/nodenv/shims:/opt/boxen/nodenv/bin:
/opt/boxen/bin:/opt/boxen/homebrew/bin:/opt/boxen/homebrew/sbin:
bin:/opt/boxen/chruby/bin:/opt/boxen/ruby-build/bin:
node_modules/.bin:/opt/boxen/nodenv/shims:/opt/boxen/nodenv/bin:
/opt/boxen/bin:/opt/boxen/homebrew/bin:/opt/boxen/homebrew/sbin:
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin

Я получаю другой $PATH. Я думал, что $PATH — это глобальная переменная в оболочке, которая не меняется. Почему эти пути разные в разных каталогах?

решение1

Я знаю, что это старый вопрос, но недавно некоторые новые пользователи Ruby столкнулись с этим "очевидно невозможным" поведением. Я отвечаю, чтобы помочь другим, кто столкнулся с этим.

Это потому, что вы используете ruby, который применяет локальные настройки bundle и gem для каждого каталога. Ваша переменная PATHявляетсяизменение просто из-за команды cd - потому что ruby ​​обрабатывает изменение cwd и применяет правильные настройки для этого целевого каталога (или глобальные настройки, если в cwd нет конфигураций) к ENV.

Очень распространенный сценарий заключается в том, что пользователь Ruby запускает команду bundle, которая явно находится в PATH (попробуйте, какой bundle), меняет каталоги, а затем команда bundle становится неизвестной (больше не находится в PATH, потому что PATH изменился в результате побочного эффекта команды cd).

Обычно это можно исправить, установив gem в проблемный каталог.

решение2

В оболочке нет глобальных переменных, т.е. переменных, общих для разных экземпляров (процессов). Экспортированные переменные копируются в дочерние процессы, но оттуда они независимы.

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