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.
You probably know to use
which to get the location of a program on the
which can also take in the flag
-a to list locations of all occurrences of a program on the
Grab the second of the list
To get the second item in a list with
bash just use the
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
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.