![基于目录的不同路径](https://linux22.com/image/1396290/%E5%9F%BA%E4%BA%8E%E7%9B%AE%E5%BD%95%E7%9A%84%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.png)
我正在使用 Play! Framework 版本 1.2.4 开发应用程序。因此我下载了此版本并将其bin/
文件夹添加到我的路径中。
然而,我正准备使用不同的版本 2.2.0 来启动另一个 Play! Framework 项目。
我不想改变我的道路,因为那样我就无法开展我的第一个项目。
我考虑过bin/play
对每个项目的根目录进行符号链接,但这似乎不是正确的解决方案。此外,我不希望有两个命令(play
和play2
)作为其各自命令的别名。
正确的做法是什么?
答案1
编写以下脚本:
#!/bin/sh
projdir1="$HOME/project/aardvark"
playdir1=/bin/play1.2.4
projdir2="$HOME/project/battlestar"
playdir2=/bin/play2.2.0
︙
case "$PWD" in
"$projdir1" | "$projdir1"/*)
export PATH="$playdir1":"$PATH"
;;
"$projdir2" | "$projdir2"/*)
export PATH="$playdir2":"$PATH"
;;
︙
*)
echo "I don't know which version of \"play\" to use in $PWD"
exit 1
esac
exec $(basename "$0") "$@"
将其放在bin
名为 的目录中play
,并附上目录中其他命令的名称链接play
(如果有)。现在,您只需键入所需的命令,脚本就会确定要运行哪个版本。(当然,您的私有bin
目录必须位于 开头附近PATH
,在任何 Play!框架目录之前。)
如果你想输入如下命令
play project/aardvark/foo
在您的主目录中,这需要做更多的工作。如果您希望能够做到
play ../battlestar/bar
而在projects/aardvark
,这将会稍微困难一些。
上述方法的一个缺点是,每当您定义新项目(或重新定义旧项目)时,都必须更新目录play
中的脚本。以下是一种允许在项目目录中本地化配置信息的方法:bin
#/bin/sh
case "$PWD" in
"$HOME"/*)
# OK
;;
*)
echo "This script should be used only within your home directory tree."
exit 1
esac
rcfile=".playrc"
while [ ! -f "$rcfile" ]
do
rcfile="../$rcfile"
done
. "$rcfile"
exec $(basename "$0") "$@"
.playrc
然后在每个项目根目录中放置一个文件,内容如下:
导出路径=“play_dir_for_this_project“:”$PATH”
并将一个.playrc
文件放在你的主目录中,说
echo "You aren’t in a \"play\" project directory."
exit 1
作为后盾。可以添加更好的错误处理,留作练习。