Linux – Multiple Installations and Understanding $PATH

bashlinuxpath

I have an older version of Git installed at:

/usr/bin/

I recently downloaded a newer version to:

/usr/local/bin

When I type:

which git

I get the location of the old version. I believe that this is just because /usr/bin/ appears before /usr/local/bin in my $PATH variable and so the older version of git is 'found' first.

To test this, I renamed the older version of git to "git_old". Now when I type:

which git

I get the location of the newer version, as expected. But when I type:

git --version

I get the following error:

-bash: /usr/bin/git: No such file or directory

I'm just wondering why my computer is going back to looking in the old location for Git?

Best Answer

Bash caches the full path to executables so that it doesn't have to look through $PATH every time.

You can see what is in the cache using the hash command:

deltik@node51 [~]$ hash
hits    command
   1    /usr/bin/git

This cache can be cleared with hash -r:

deltik@node51 [~]$ hash -r
deltik@node51 [~]$ hash
hash: hash table empty

Additional Resources

Related Question