Working with multiple items on the $PATH
If you're like me then you have a $HOME/bin
directory or something similar where you put custom versions of programs you use. But what if you need the original version for something? Memorizing the path works but is a real pain. Here is how to create a bash function that will run the old version of your command.
The which
command
You probably know to use which
to get the location of a program on the $PATH
, but which
can also take in the flag -a
to list locations of all occurrences of a program on the $PATH
.
Grab the second of the list
To get the second item in a list with bash
just use the head
and tail
commands together:
head -n 2
takes the top 2 items in the list and then tail -n 1
takes the last of those. You can actually grab any index by replacing the 2
with the line you want.
Tying it all together
The easiest way to use this is to add a function to your .bashrc
as follows.
I didn't mention shift
above. It is simply a bash command that removes the first argument from the argument list. That way you can pass the program $@
and it wont include the name of the program as an argument.
Using your new function
Just type old
before the command you would normally use. For example:
$ old vim file.txt
An interesting sidenote, tab completion still seems to work when using this trick. I have no idea why but I'm glad it does.