自从安装了dotnet、mono后,就可以直接在终端上敲相应的命令。
但是它们既不在常规路径里(如/usr/local/bin/之类),我也没有把它们添加到自定义的配置中,它们是怎么进入PATH环境变量的呢?

dotnet位于/usr/local/share/dotnet/dotnet
mono位于/Library/Frameworks/Mono.framework/Versions/Current/Commands

首先,自己的.bashrc.profile里都没有
然后检查系统的/etc/bashrc里面也没有
再看系统的/etc/profile里,显然也不会有这些第三方工具的痕迹,但是却发现一个可疑的对象:

1
2
3
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi

搜索得知原来就是这个path_helper干的好事:

  1. /etc/paths,每一行都加到PATH
  2. /etc/paths.d下的每一个文件,每一行都加到PATH

打开本机上的paths.d目录一看,果然都齐齐整整在这里了:

1
2
└──( ls /etc/paths.d/
dotnet dotnet-cli-tools mono-commands

参考:
https://scriptingosx.com/2017/05/where-paths-come-from/
http://www.softec.lu/site/DevelopersCorner/MasteringThePathHelper