I have an old version of a program sitting on my machine. This program recently had a version upgrade. The way I used to run my old program was by typing “runProgram”. The path to the runscript of my program was specified in my PATH variable as
PATH = ....:/path/to/my/old/programs/bin
I want to run the new version of this same program alongside my old program and the way I was thinking of doing it was by modifying my PATH variable as follows:
PATH = ....:/path/to/my/old/programs/bin:/path/to/my/new/programs/bin
What I want to achieve is some way to alias these two paths so that when I type ‘runVersion1’, the previous version is executed and when I type ‘runVersion2’, the new version is executed?
Is there a way to achieve that?
Thanks
If the program itself runs other programs from the bin directory, then when you run a version 1 program, you want to ensure that the version 1 directory is on the PATH ahead of the version 2 directory, and vice versa when you run a version 2 program. That is something I deal with all the time, and I deal with it by ensuring that the PATH is set appropriately.
In my $HOME/bin, I would place two scripts:
RunVersion1
RunVersion2
This technique of placing shell scripts on my PATH ahead of other programs allows me to pick which programs I run.
Semi-Generic Version
Often, I’ll use a single program to set the environment and then link it to the various program names that I want to handle. It then looks at
$0and runs that:If this script is linked to
RunProgram2, thebasenamecommand lops off the 2 from the end ofRunProgram2and then executesRunProgramfrom the more recent directory.I’ve used this general technique for accessing 32-bit and 64-bit versions of the software on a single machine, too. The programs I deal with tend to have more complex environments than just a setting of $PATH, so the scripts are bigger.
One of the main advantages of scripts in $HOME/bin over aliases and the like is that it doesn’t much matter which shell I’m stuck with using; it works the same way. Plus I don’t have so many places to look to find where the alias is defined (because it isn’t defined).