.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変数にとって重要です...)
したがって、のエントリから始める場合、PATHpath_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/pathsand/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_helperPATH