.bash_profile
または.bashrc
がPATHに追加
されており、シェルの起動中に呼び出される.rbenv/shims
前のある時点で実行されていると思わ
れます。path_helper
path_helperのマニュアルページは次のように開きます。
The path_helper utility reads the contents of the files in the directo-
ries /etc/paths.d and /etc/manpaths.d and appends their contents to the
PATH and MANPATH environment variables respectively.
ここで重要な点は、path_helperユーティリティは、コンテンツをPATH
置き換えるのではなく、既存の設定にコンテンツを追加することを目的としているということです。(実際には、コンテンツを追加するのではなく、コンテンツを追加することです。これはPATH
変数にとって重要です...)
したがって、のエントリから始める場合、PATH
path_helperによって生成された設定により、生成されたエントリが継続されるようにPATH
なります。
% echo $SHELL
/bin/bash
% uname
Darwin
% /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"; export PATH;
% PATH="" /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"; export PATH;
% PATH=foo /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo"; export PATH;
とfoo
の内容は変更されていませんが、最後の行のPATHに含まれていることに注意してください。/etc/paths
/etc/paths.d/*
同時に、path_helperユーティリティは、エントリが重複するパスを生成しないように注意しているようです。/etc/paths
and/etc/paths.d/*
とcurrent
を連結した後、重複するエントリを削除しますPATH
。
PATH
この後者の詳細は、元の設定(!)と比較してエントリの並べ替えを引き起こす可能性があるため、特に混乱を招く可能性があります。
この動作の例を次に示します。最初のケースは、重複foo
が削除されていることを示しています。2番目と3番目のケースは、エントリの並べ替えを示しています。生成されたPATHはどちらの場合も同じですが、3番目のケースでは、/usr/bin
エントリはの間から前に移動されてfoo
いbar
ますPATH
。(この重複エントリの削除は、文字列がとの間に/usr/bin/
残っている以下の4番目のケースで示されているように、エントリのペアでの単純な文字列照合に基づいているようです。)foo/
bar
% PATH=foo:foo /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo"; export PATH;
% PATH=foo:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo:bar"; export PATH;
% PATH=foo:/usr/bin:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo:bar"; export PATH;
% PATH=foo/:/usr/bin/:bar /usr/libexec/path_helper
PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:foo/:/usr/bin/:bar"; export PATH;
最後に、クレジットが必要な場所にクレジットを与えるために:上記のコマンドシーケンスはすべて私自身の調査の結果ですが、私はもともと、環境変数セットを再利用することを指摘したここpath_helper
のメモを読んだ後の動作を調べるように促されました親プロセスによる。path_helper
PATH