如果我在 $PATH 上有两个同名的可执行文件,那么在终端中运行时,Ubuntu 如何决定使用哪一个?
例如,我的 Ubuntu 最初将 python 安装在 /usr/bin/python 中。最近,我安装了 Anaconda 的 python 发行版,它有自己的二进制文件安装在 /home/karnivaurus/anaconda/bin/python 中。然后,在我的 .bashrc 文件中,我输入:
export PATH="/home/karnivaurus/anaconda/bin:$PATH"
因此,两个二进制文件现在都在 PATH 上。但是,如果我在终端中运行 python,它总是使用原始安装,而不是 Anaconda 的版本。这是为什么?
答案1
为了优化命令查找,bash 会为每个 bash 进程保留一个缓存,记录它找到文件的位置。因此,如果您键入了文件,python
并且它在 /usr/bin/ 中找到它,那么更改 PATH 以在 PATH 中更早地提供另一个 python 将不起作用。您还需要给出 bash 命令:
hash -r
忘记优化缓存。请参阅help hash
。(当然,我假设您重新读取了 .bashrc 或也在 shell 中明确设置了 PATH)。