多次安装和理解 $PATH

use*_*817 17 linux bash path

我在以下位置安装了旧版本的 Git:

/usr/bin/
Run Code Online (Sandbox Code Playgroud)

我最近下载了一个较新的版本:

/usr/local/bin
Run Code Online (Sandbox Code Playgroud)

当我输入:

which git
Run Code Online (Sandbox Code Playgroud)

我得到了旧版本的位置。我相信这只是因为 /usr/bin/ 出现在我的 $PATH 变量中的 /usr/local/bin 之前,所以旧版本的 git 首先被“找到”。

为了测试这一点,我将旧版本的 git 重命名为“git_old”。现在当我输入:

which git
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,我得到了较新版本的位置。但是当我输入:

git --version
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

-bash: /usr/bin/git: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我只是想知道为什么我的计算机要回到旧位置查找 Git?

Del*_*tik 31

Bash 缓存了可执行文件的完整路径,这样它就不必$PATH每次都查看。

您可以使用以下hash命令查看缓存中的内容:

deltik@node51 [~]$ hash
hits    command
   1    /usr/bin/git
Run Code Online (Sandbox Code Playgroud)

可以使用以下命令清除此缓存hash -r

deltik@node51 [~]$ hash -r
deltik@node51 [~]$ hash
hash: hash table empty
Run Code Online (Sandbox Code Playgroud)

其他资源

  • wtf 我从来不知道这个,太棒了。 (2认同)