基于目录的不同路径

eli

我正在使用Play开发应用程序!框架版本1.2.4。因此,我已经下载了此bin/文件并将其文件夹添加到我的路径中。

但是,我正准备开始另一场比赛!使用版本2.2.0的Framework项目,这是一个不同的版本。

我不想只更改自己的路径,因为那样我将无法进行第一个项目。

我曾考虑过将符号链接bin/play到每个项目的根目录,但这似乎不是正确的解决方案。另外,我宁愿没有两个命令(playplay2)作为它们各自命令的别名。

什么是正确的方法?

史考特

编写以下脚本:

#!/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目录必须出现在PATHPlay框架目录之前的开头附近。)

如果您想输入类似的命令

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在每个项目的根目录中放置一个文件,说

导出PATH =“ play_dir_for_this_project ”:“ $ PATH”

.playrc在您的主目录中放置一个文件,说

echo "You aren’t in a \"play\" project directory."
exit 1

作为支持。可以添加更好的错误处理,并将其作为练习。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章