Wenn ich in einem Verzeichnis bin und den Echopfad
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
Wenn ich mich in einem anderen Verzeichnis befinde und den Echopfad
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
Ich erhalte einen anderen $PATH. Ich dachte, $PATH wäre eine globale Variable in der Shell, die sich nicht ändert. Warum sind diese Pfade in verschiedenen Verzeichnissen unterschiedlich?
Antwort1
Ich weiß, dass dies eine alte Frage ist, aber vor kurzem sind einige neue Ruby-Benutzer auf dieses „scheinbar unmögliche“ Verhalten gestoßen. Ich antworte, um anderen zu helfen, die auf dasselbe gestoßen sind.
Das liegt daran, dass Sie Ruby verwenden, das lokale Bundle- und Gem-Einstellungen für jedes Verzeichnis anwendet. Ihre PATH-VariableIstÄnderung einfach aufgrund eines CD-Befehls – weil Ruby die CWD-Änderung verarbeitet und die richtigen Einstellungen für dieses Zielverzeichnis (oder globale Einstellungen, wenn in CWD keine Konfigurationen vorhanden sind) auf die Umgebung anwendet.
Ein sehr häufiges Szenario besteht darin, dass ein Ruby-Benutzer den Bundle-Befehl ausführt, der sich eindeutig im Pfad befindet (versuchen Sie es mit „which bundle“), das Verzeichnis wechselt und dann feststellt, dass der Bundle-Befehl unbekannt ist (nicht mehr im Pfad, da sich der Pfad als Nebeneffekt des CD-Befehls geändert hat).
Normalerweise kann dies durch die Installation eines Gems im problematischen Verzeichnis behoben werden.
Antwort2
In der Shell gibt es keine globalen Variablen, also Variablen, die von verschiedenen Instanzen (Prozessen) gemeinsam genutzt werden. Exportierte Variablen werden in untergeordnete Prozesse kopiert, sind von dort aber unabhängig.