在linux中混淆同一程序的两个不同版本?

sc_*_*ray 2 linux shell alias path environment-variables

我的机器上有一个旧版本的程序.该程序最近进行了版本升级.我以前运行旧程序的方式是键入"runProgram".我的程序的脚本路径在我的PATH变量中指定为

PATH = ....:/path/to/my/old/programs/bin
Run Code Online (Sandbox Code Playgroud)

我想在我的旧程序旁边运行同一个程序的新版本,我想这样做的方法是修改我的PATH变量,如下所示:

PATH = ....:/path/to/my/old/programs/bin:/path/to/my/new/programs/bin
Run Code Online (Sandbox Code Playgroud)

我想要实现的是一些别名这两个路径的方法,这样当我输入'runVersion1'时,执行以前的版本,当我输入'runVersion2'时,新版本被执行了吗?

有没有办法实现这一目标?

谢谢

Jon*_*ler 5

如果程序本身从bin目录运行其他程序,那么当您运行版本1程序时,您希望确保版本1目录位于版本2目录之前的PATH上,反之亦然,当您运行版本2时程序.这是我一直处理的事情,我通过确保适当设置PATH来处理它.

在我的$ HOME/bin中,我会放置两个脚本:

RunVersion1

 export PATH=/path/to/my/old/programs/bin:$PATH
 # Set other environment variables as needed
 exec runProgram "$@"
Run Code Online (Sandbox Code Playgroud)

RunVersion2

 export PATH=/path/to/my/new/programs/bin:$PATH
 # Set other environment variables as needed
 exec runProgram "$@"
Run Code Online (Sandbox Code Playgroud)

这种在其他程序之前将shell脚本放在我的PATH上的技术允许我选择我运行的程序.

半通用版本

通常,我将使用单个程序来设置环境,然后将其链接到我想要处理的各种程序名称.然后它查看$0并运行:

 export PATH=/path/to/my/new/programs/bin:$PATH
 # Set other environment variables as needed
 exec $(basename $0 2) "$@"
Run Code Online (Sandbox Code Playgroud)

如果链接了此脚本RunProgram2,则basename命令会从结尾处删除2 RunProgram2,然后RunProgram从更新的目录执行.

我也使用这种通用技术在一台机器上访问32位和64位版本的软件.我处理的程序往往比只有$ PATH的设置有更复杂的环境,因此脚本更大.

$ HOME/bin中的脚本与别名之类的主要优点之一是,使用哪个shell并不重要; 它的工作方式相同.另外,我没有太多的地方可以找到定义别名的位置(因为它没有定义).