2つのディレクトリ間で$ PATH変数が異なるのはなぜですか?

2つのディレクトリ間で$ 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を使っているからです。ディレクトリごとにローカルバンドルとgem設定を適用しています。パス変数はい変更は cd コマンドによって発生します。これは、Rubyがcwdの変更を処理し、そのターゲットディレクトリの正しい設定(またはcwdで構成されていない場合はグローバル設定)をENVに適用するためです。

非常に一般的なシナリオは、Rubyユーザーが明らかにPATH(バンドルが試行されている)にあるバンドルコマンドを実行し、ディレクトリを変更してからバンドルコマンドを未知のままにすることです(PATHにすでに存在するため、PATHにはもうありません。 )。片側に変更)cdコマンド)。

通常、この問題はそのディレクトリにgemをインストールすることで解決されます。

おすすめ記事