What does hash -r command do?
I recently switched to linux full time from windows and while I was trying to update my npm
package using n
, I got the new binaries in /usr/local/bin
and previous version was in /usr/bin
. So, it was always picking the previous version.
As per recommendation by a fellow user, I used hash-r
command and it worked. But, I don't know what it did.
It would be very helpful if someone could explain its internals to me.
hash
is a built-in command of the bash
shell. For a summary of what it does you can type help hash
at the shell prompt:
$ help hash
hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.
Determine and remember the full pathname of each command NAME. If
no arguments are given, information about remembered commands is displayed.
Options:
-d forget the remembered location of each NAME
-l display in a format that may be reused as input
-p pathname use PATHNAME as the full pathname of NAME
-r forget all remembered locations
-t print the remembered location of each NAME, preceding
each location with the corresponding NAME if multiple
NAMEs are given
Arguments:
NAME Each NAME is searched for in $PATH and added to the list
of remembered commands.
Exit Status:
Returns success unless NAME is not found or an invalid option is given.
So, hash
remembers program locations, and hash -r
forgets them.
The shell tracks where executables such as npm reside to avoid having to search the PATH environment variable every time you want to run something.
The -r (reset) argument to hash clears the cache.
If you want to see what commands hash has remembered, simply type hash on its own without any arguments.
You can disable the cache altogether by typing set +h and re-renable it via set -h