sc_*_*ray 2 linux shell alias path environment-variables
我的机器上有一个旧版本的程序.该程序最近进行了版本升级.我以前运行旧程序的方式是键入"runProgram".我的程序的脚本路径在我的PATH变量中指定为
PATH = ....:/path/to/my/old/programs/bin
我想在我的旧程序旁边运行同一个程序的新版本,我想这样做的方法是修改我的PATH变量,如下所示:
PATH = ....:/path/to/my/old/programs/bin:/path/to/my/new/programs/bin
我想要实现的是一些别名这两个路径的方法,这样当我输入'runVersion1'时,执行以前的版本,当我输入'runVersion2'时,新版本被执行了吗?
有没有办法实现这一目标?
谢谢
如果程序本身从bin目录运行其他程序,那么当您运行版本1程序时,您希望确保版本1目录位于版本2目录之前的PATH上,反之亦然,当您运行版本2时程序.这是我一直处理的事情,我通过确保适当设置PATH来处理它.
在我的$ HOME/bin中,我会放置两个脚本:
 export PATH=/path/to/my/old/programs/bin:$PATH
 # Set other environment variables as needed
 exec runProgram "$@"
 export PATH=/path/to/my/new/programs/bin:$PATH
 # Set other environment variables as needed
 exec runProgram "$@"
这种在其他程序之前将shell脚本放在我的PATH上的技术允许我选择我运行的程序.
通常,我将使用单个程序来设置环境,然后将其链接到我想要处理的各种程序名称.然后它查看$0并运行:
 export PATH=/path/to/my/new/programs/bin:$PATH
 # Set other environment variables as needed
 exec $(basename $0 2) "$@"
如果链接了此脚本RunProgram2,则basename命令会从结尾处删除2 RunProgram2,然后RunProgram从更新的目录执行.
我也使用这种通用技术在一台机器上访问32位和64位版本的软件.我处理的程序往往比只有$ PATH的设置有更复杂的环境,因此脚本更大.
$ HOME/bin中的脚本与别名之类的主要优点之一是,使用哪个shell并不重要; 它的工作方式相同.另外,我没有太多的地方可以找到定义别名的位置(因为它没有定义).