概要
ずっと謎だったことが解決して、忘れないうちにメモメモ。
(単純に私が知らなかっただけなのですが)
macOSで、.NET Core
をインストールすると、dotnetコマンドが使えるようになります。
んで、
$ which dotnet
ってすると
~$ which dotnet
/usr/local/share/dotnet/dotnet
って出ます。
でも、自分の設定ファイル
- $HOME/.bashrc
- $HOME/.bash_profile
- /etc/bashrc
- /etc/profile
みても、どこにもそんなパス設定していないのです。でもパスが通ってる・・・。謎・・・・。
ってずっと思っていました。まあ使えるからいいやって思ってました。
んで、heroku絡みで Postgres.app ってのをインストールしようとして、ドキュメントみてると
sudo mkdir -p /etc/paths.d && echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
ってコマンドを打ち込んでねって書いてありました。
ん? /etc/paths.d
って何これ?
ちょっと調べてみると、こいつが出てきた。
path_helper
path_helper さん
そういえば、こいつ /etc/profile
で一番最初に処理されているやつです。
if [ -x /usr/libexec/path_helper ]; then eval `/usr/libexec/path_helper -s` fi if [ "${BASH-no}" != "no" ]; then [ -r /etc/bashrc ] && . /etc/bashrc fi
man で見てみる。
$ man path_helper
説明のところに、件の/etc/paths.d
が出てきた。
DESCRIPTION The path_helper utility reads the contents of the files in the directories /etc/paths.d and /etc/manpaths.d and appends their contents to the PATH and MANPATH environment variables respectively. (The MANPATH environment variable will not be modified unless it is already set in the environment.) Files in these directories should contain one path element per line. Prior to reading these directories, default PATH and MANPATH values are obtained from the files /etc/paths and /etc/manpaths respectively.
以下のルールのようですね。
デフォルトのパス設定は、
/etc/paths
ファイルから読み取られる。残りは、
/etc/paths.d
ディレクトリの下から読み取られる。
なるほど。。。てことで見てみる。
~$ file /etc/paths
/etc/paths: ASCII text
~$ cat /etc/paths
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
そのまんま記述されているんですね。次は、/etc/paths.d
~$ ls /etc/paths.d dotnet mono-commands ~$ file /etc/paths.d/dotnet /etc/paths.d/dotnet: ASCII text ~$ cat /etc/paths.d/dotnet /usr/local/share/dotnet
いた!!ここで、dotnet のパス設定されてたんですね。
てことで、上のPostgres.appのサイトに記載されている
sudo mkdir -p /etc/paths.d && echo /Applications/Postgres.app/Contents/Versions/latest/bin | sudo tee /etc/paths.d/postgresapp
は、このアプリのパスを通すために、ここにファイルを出力しようとしていたのですね。納得。
なので、この方式でパス設定しておくと、shellを変更しても設定し直さなくていい。
知ると便利ですね。
ちなみに、zsh の方の /etc/zprofile
にも同じようにpath_helperの設定がありました。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場