为什么 bash 不尊重 ${PATH} 和/或符号链接?

为什么 bash 不尊重 ${PATH} 和/或符号链接?

我在 OSX 上并安装了 Homebrew 来获取 GNU coreutils。我想gsort使用而不是预安装的sort命令,所以我创建了一个符号链接到gsort.我有限的经验告诉我,sort从 CL 或在脚本中运行将使用gsort,但事实并非如此:

$ which gsort; which sort
/usr/local/bin/gsort
/usr/local/bin/sort
$ ll /usr/local/bin/ | fgrep sort
1083450 lrwxr-xr-x  1 alex  admin  -   34B Mar 23 15:56:52 2016 gsort@ -> ../Cellar/coreutils/8.25/bin/gsort
1083466 lrwxr-xr-x  1 alex  admin  -   35B Mar 23 15:56:52 2016 gtsort@ -> ../Cellar/coreutils/8.25/bin/gtsort
1088327 lrwxr-xr-x  1 alex  admin  -   34B Mar 23 16:57:41 2016 sort@ -> ../Cellar/coreutils/8.25/bin/gsort
$ echo ${PATH} 
/usr/local/opt/gnu-sed/bin/:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
$ gsort --version | fgrep GNU
sort (GNU coreutils) 8.25
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
$ /usr/local/bin/sort --version | fgrep GNU
sort (GNU coreutils) 8.25
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
$ sort --version | fgrep GNU
sort (GNU coreutils) 5.93
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.

gsort请注意,当检查和的版本时sort(当使用符号链接的绝对路径时),它正确显示了较新的 coreutils 版本,但仅运行sort仍然给我旧的预安装版本。谁能告诉我为什么?

答案1

sort如果您在安装符号链接之前在同一 shell 会话中启动,bash则已缓存路径搜索结果。用于type sort检查是否应答sort is hashed (/usr/bin/sort)

相关内容